Comparer deux tables

Eléphanteau du PHP | 10 Messages

08 juil. 2005, 15:18

Bonjour, Voici mon probleme. J'ai deux tables : table_A et table_B reprenant des articles numerotés sous "ID". la TABLE_B reprend simplement une liste ID avec en deuxieme colonne un 0 ou un 1 pour savoir si l'article est nouveau ou pas.
J'aimerai prendre tous les elements de la TABLE_A qui sont présents dans la TABLE_B et nouveau.

J'ai essayé cette commande ci :

SELECT id, nom, details FROM table_A WHERE id IN (SELECT id FROM table_B where nouveaute = '1') ORDER BY nom

Elle ne marche pas !

Quand je fais simplement

SELECT id, nom, details FROM table_A ORDER BY nom

Ca marche. Donc l'erreur devrait se trouver dans le

SELECT id FROM table_B where nouveaute= '1'

Mais je ne vois pas ou.

Je precise que je suis "sous" MySql 4.0.20a et donc les sous requetes devraient fonctionner.

Merci pour votre aide.

[EDIT : J'avais mis "where nouveaute= '2' " au lieu de where "nouveaute= '1' ", le probleme est toujours le meme]
Modifié en dernier par demetan le 08 juil. 2005, 15:28, modifié 1 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 juil. 2005, 15:38

Avec ta version de MySQL, tu peut utiliser IN , mais pas les sous-requêtes

Si tu veux faire un équivalent, il faut que tu fasses ta 1ere requete, que tu construise la liste des résultats et que tu passes cette liste dans le IN
$str_requete = "SELECT id FROM table_B where nouveaute = '1'";
//execution requete

$a_tab = array();
while($a_result = mysql_fetch_array(RESULTAT_REQUETE)) {
  array_push($a_tab, $a_result["id"]);
}

$str_liste = implode(",", $a_tab);

$str_requete = "SELECT id, nom, details FROM table_A WHERE id IN (".$str_requete.") ORDER BY nom";
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 10 Messages

08 juil. 2005, 15:43

merci ,

Oui je viens de voir que les subselect c'est a partir de 4.1.

Je vais essayer ce que tu proposes.

ViPHP
pjl
ViPHP | 2119 Messages

08 juil. 2005, 15:45

Une jointure serait amplement suffisante pour résoudre ton PB.

Eléphanteau du PHP | 10 Messages

08 juil. 2005, 16:31

Effectivement
avec un join inner ca marche :

SELECT A.id, A.nom, A.details FROM table_A A INNER JOIN table_B B ON A.id = B.id WHERE B.nouveaute = '1' ORDER BY nom


MERCI !!!!!!!!!!!!!!!!!!!!