Page 1 sur 1

Requête sur 2 tables

Posté : 08 sept. 2010, 23:29
par Arnaud19
Bonsoir,

Tout d'abord je suis débutant en programmation. Je me suis mis en tête de réaliser un petit script me permettant de réaliser un calendrier de match de foot.

J'ai réalisé une BDD comportant entre autre deux tables, l'une avec la liste des clubs, l'autre la liste des matches. Voici leurs structures :

Table équipes (id_equipe, nom_equipe)
Table matches (id_matches, num_match, date, heure, equipe_dom, equipe_ext, id_journee)

equipe_dom et equipe_ext correspondant à id_equipe

Je souhaite donc avoir, au final un tableau reprenant les données suivantes, en fonction de la journée choisie :

Equipe jouant à domicile vs Equipe jouant à l'extérieur
Date et Heure du match

Voici mon script pour la première journée (id_journee = 1) :

<?php
$query = ('SELECT *
FROM matches, equipes
WHERE matches.id_journee = 1');
$result = mysqli_query($connexion, $query) or die ("La requête ne peut être exécutée");


while ($val = mysqli_fetch_array($result)) // On fait une boucle pour lister les résultats
{

?>

<tr>
<td><?php echo $val['equipe_dom']; echo 'vs'; echo $val['equipe_ext']; echo '<br>'; echo $val['date']; echo ' - '; echo $val['heure'];?></td>
</tr>

<?php
} // Fin de la boucle
?>

Mon problème est que j'obtiens une longue liste alors que la journée en question ne devrait comporter que 5 matches. De plus, je ne comprends pas comment je pourrais faire apparaître le nom des clubs à la place des id? Je voudrais en effet que equipe_dom et equipe_ext, renvoient le nom du club. Comment dois-je m'y prendre? Merci de votre aide

Re: Requête sur 2 tables

Posté : 09 sept. 2010, 01:17
par AB
Un "petit" cours sur les jointure

Re: Requête sur 2 tables

Posté : 09 sept. 2010, 14:37
par Superpilou
Je conseille d'utiliser les inner join.
En effet les left et les rights join posent certains soucis du fait qu'elles peuvent
renvoyer des nuls.

Re: Requête sur 2 tables

Posté : 09 sept. 2010, 19:09
par Cyrano
Je conseille d'utiliser les inner join.
En effet les left et les rights join posent certains soucis du fait qu'elles peuvent
renvoyer des nuls.
C'est là un conseil qui est un peu hors de propos : selon le cas, on peut avoir ou non besoin des valeurs NULL : donc selon le cas, on utilisera des jointures avec INNER JOIN ou bien avec LEFT (ou RIGHT) OUTER JOIN. Et c'Est précisément fait pour ça, requête interne si on ne veut que les lignes ayant des occurrences de données dans toutes les tables qui composent la jointure, ou bien externe pour avoir toutes les lignes d'une table incluant celles qui n'ont pas de correspondance dans les autres tables.

Lorsque vous devez concevoir des requêtes SQL, pensez toujours avec logique par rapport à ce qui est attendu au bout, et non par ce qui semble le plus facile à utiliser sans autre critère de choix de méthode. Autrement, le risque est qu'il faudra ajouter une autre requête pour aller chercher des éléments manquants, ou bien au contraire trier le retour pour supprimer des données surnuméraires. N'oubliez pas non plus qu'un serveur de base de données, ce n'est pas juste une bête boite pleine de tiroirs de données, c'est aussi le langage SQL qui offre des possibilités de tri assez considérables pour peu qu'on prenne la peine d'y réfléchir un peu.