verifier si une jointure existe

Eléphant du PHP | 294 Messages

02 janv. 2006, 12:10

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

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

02 janv. 2006, 12:39

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

Mammouth du PHP | 19672 Messages

02 janv. 2006, 12:42

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...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: