Page 1 sur 1

verifier si une jointure existe

Posté : 02 janv. 2006, 12:10
par Gico
Bonjour et bonne année!

J'aimerais savoir s'il est possible dans un requete de verifier si une jointure n'existe pas.
je precise :
mysql_select_db($database_sweetie, $sweetie);
$query_rsCom = "SELECT commandes.ID, commandes.`date`, commandes.clientID, commandes.totalTTC, commandes.datelivraison, client_ID , clients.nom, clients.prenom, clients.societe, CMCICResultat.resultat, CMCICResultat.reference FROM commandes, clients, CMCICResultat WHERE client_ID=commandes.clientID AND  commandes.ID=CMCICResultat.reference";
$query_limit_rsCom = sprintf("%s LIMIT %d, %d", $query_rsCom, $startRow_rsCom, $maxRows_rsCom);
$rsCom = mysql_query($query_limit_rsCom, $sweetie) or die(mysql_error());
$row_rsCom = mysql_fetch_assoc($rsCom);
là je sort toutes les entrées WHERE commandes.ID=CMCICResultat.reference.

J'aimerais créer une seconde requete qui me sorte toutes les entrées ou la jointure de commandes.ID avec CMCICResultat.reference n'existe pas (car l'entrée dans la table CMCICR n'a pas été crée).
En plus prosaique : je reprend la requete precedente avec WHERE client_ID=commandes.clientID AND " commandes.ID ne trouve pas de nombre egal dans CMCICResultat.reference".

Merci

Posté : 02 janv. 2006, 12:39
par ouckileou
Salut,

tu peux faire cela dans la même requête, avec une jointure externe.
Celle ci va combler les trous (là où il n'y a pas correspondances) avec une valeur NULL.

Tu peux regarder ici : http://www.laltruiste.com/document.php? ... terne.html

Posté : 02 janv. 2006, 12:42
par Cyrano
Tu pourrais peut-être modifier ta requête en faisant une jointure gauche comme ceci (à tester)
$query_rsCom = "SELECT commandes.ID, commandes.date, commandes.clientID, commandes.totalTTC, commandes.datelivraison, client_ID , clients.nom, clients.prenom, clients.societe, CMCICResultat.resultat, CMCICResultat.reference ".
               "FROM clients, commandes LEFT JOIN CMCICResultat ".
               "ON  commandes.ID = CMCICResultat.reference ".
               "WHERE client_ID = commandes.clientID ";
Dans ce cas, si une correspondance n'existe pas, tu auras une ligne avec une valeur NULL affichée. Il te restera donc à tester la valeur pour afficher ou non la ligne ou bien à ne récupérer que les lignes avec la valeur NULL...