ouarzazat Posté 5 Avril 2006 Posté 5 Avril 2006 Bonjour, voici ma table, tab_recherche: code_recherche| identification_id --------------------------------------- 1 |1 1 |2 1 |3 --------------------------------------- 2 |2 2 |3 2 |7 --------------------------------------- Je cherche à savoir comment sélectionner les identification_id dont le code_recherche vaut 1 ET 2. J'ai essayé avec ça: SELECT DISTINCT identification_id FROM tab_recherche WHERE code_recherche='1' AND code_recherche='2' Mais ça me revoie une page vierge. Pourriez vous m'expliquer pourquoi cela ne renvoie rien et ce qu'il aurait fallu faire? Merci à tous!!
petit-ourson Posté 5 Avril 2006 Posté 5 Avril 2006 J'ai essayé avec ça:SELECT DISTINCT identification_id FROM tab_recherche WHERE code_recherche='1' AND code_recherche='2' <{POST_SNAPBACK}> SELECT DISTINCT identification_id FROM tab_recherche WHERE code_recherche='1' OR code_recherche='2' Et avec un OR ? code_recherche ne peut pas à la fois avoir 1 comme valeur et 2.
Bolbo Posté 5 Avril 2006 Posté 5 Avril 2006 Bonjour, La requete avec AND recherche les lignes dont le code_recherche est 1 ET 2. Pour avoir les lignes dont le code_recherche est 1 OU 2 il faut : SELECT DISTINCT identification_id FROM tab_recherche WHERE code_recherche='1' OR code_recherche='2' Normalement ca devrait mieux marcher je pense.
Portekoi Posté 5 Avril 2006 Posté 5 Avril 2006 SELECT identification_id FROM tab_recherche WHERE code_recherche in (1,2)
ouarzazat Posté 5 Avril 2006 Auteur Posté 5 Avril 2006 (modifié) Ca ne me donne pas le résultat escompté. Il me faut les identification_id dont le code_recherche vaut 1 et dont le code_recherche vaut 2. Pas soit 1 soit 2. En fait la réponse que je voudrais obtenir est 2, 3. J'espère que vous pourrez m'aider, merci déjà de vous être penché sur la question. Modifié 5 Avril 2006 par ouarzazat
Bolbo Posté 5 Avril 2006 Posté 5 Avril 2006 (modifié) SELECT identification_id FROM tab_recherche WHERE code_recherche='1' AND identification_id IN ( SELECT identification_id FROM tab_recherche WHERE code_recherche='2' ) En faisant des requetes imbriquées ca peut marcher, à tester Modifié 5 Avril 2006 par Bolbo
ouarzazat Posté 5 Avril 2006 Auteur Posté 5 Avril 2006 (modifié) Joliiiiiiiiiiii !! Bien vu pile poil, et merci ! Modifié 5 Avril 2006 par ouarzazat
Portekoi Posté 5 Avril 2006 Posté 5 Avril 2006 Euh.. par rapport au problème exposé, la solution que je t'ai donné fonctionne ou alors j'ai pas compris ta demande...
ouarzazat Posté 5 Avril 2006 Auteur Posté 5 Avril 2006 ou alors... désolé je me suis peut etre mal exprimé, mais merci pour ton aide. à bientôt.
ouarzazat Posté 5 Avril 2006 Auteur Posté 5 Avril 2006 RE et là je reviens avec la question qui tue Sachant que je peux avoir une liste de code recherche allant de 1 à 12, c'est à dire 12 code_recherche numéroté de 1 à 12: Comment adapter la requête SQL de Bolbo ?????????????? Voici le code que j'ai tapoté, dont le principe me paraissait bon bien que lourd mais qui est totalement innéficace, je retrouve ma bonne vieille page vierge: $code_recherche = ;// entre 1 et 12 en l'occurence;switch ($code_recherche) { case 1: // dans le cas où $code_recherche vaut 1$a=1;$b=1;$c=1;$d=1;$e=1;$f=1;$g=1;$h=1;$i=1;$j=1;$k=1;$l=1;break;case 2: // dans le cas où $code_recherche vaut 2$a=1;$b=2;$c=1;$d=1;$e=1;$f=1;$g=1;$h=1;$i=1;$j=1;$k=1;$l=1;break;case 3: // dans le cas où $code_recherche vaut 3$a=1;$b=2;$c=3;$d=1;$e=1;$f=1;$g=1;$h=1;$i=1;$j=1;$k=1;$l=1;break;case 4: // etc etc$a=1;$b=2;$c=3;$d=4;$e=1;$f=1;$g=1;$h=1;$i=1;$j=1;$k=1;$l=1;break;case 5:$a=1;$b=2;$c=3;$d=4;$e=5;$f=1;$g=1;$h=1;$i=1;$j=1;$k=1;$l=1;break;case 6:$a=1;$b=2;$c=3;$d=4;$e=5;$f=6;$g=1;$h=1;$i=1;$j=1;$k=1;$l=1;break;case 7:$a=1;$b=2;$c=3;$d=4;$e=5;$f=6;$g=7;$h=1;$i=1;$j=1;$k=1;$l=1;break;case 8:$a=1;$b=2;$c=3;$d=4;$e=5;$f=6;$g=7;$h=8;$i=1;$j=1;$k=1;$l=1;break;case 9:$a=1;$b=2;$c=3;$d=4;$e=5;$f=6;$g=7;$h=8;$i=9;$j=1;$k=1;$l=1;break;case 10:$a=1;$b=2;$c=3;$d=4;$e=5;$f=6;$g=7;$h=8;$i=9;$j=10;$k=1;$l=1;break;case 11:$a=1;$b=2;$c=3;$d=4;$e=5;$f=6;$g=7;$h=8;$i=9;$j=10;$k=11;$l=1;break;case 12:$a=1;$b=2;$c=3;$d=4;$e=5;$f=6;$g=7;$h=8;$i=9;$j=10;$k=11;$l=12;break;}$regroupement_identification_id = mysql_query("SELECT identification_id FROM tab_recherche WHERE code_recherche=$a AND identification_id IN ( SELECT identification_id FROM tab_recherche WHERE code_recherche=$b AND identification_id IN (SELECT identification_id FROM tab_recherche WHERE code_recherche=$c AND identification_id IN ( SELECT identification_id FROM tab_recherche WHERE code_recherche=$d AND identification_id IN ( SELECT identification_id FROM tab_recherche WHERE code_recherche=$e AND identification_id IN ( SELECT identification_id FROM tab_recherche WHERE code_recherche=$f AND identification_id IN ( SELECT identification_id FROM tab_recherche WHERE code_recherche=$g AND identification_id IN ( SELECT identification_id FROM tab_recherche WHERE code_recherche=$h AND identification_id IN ( SELECT identification_id FROM tab_recherche WHERE code_recherche=$i AND identification_id IN ( SELECT identification_id FROM tab_recherche WHERE code_recherche=$j AND identification_id IN ( SELECT identification_id FROM tab_recherche WHERE code_recherche=$k AND identification_id IN ( SELECT identification_id FROM tab_recherche WHERE code_recherche=$l)))))))))))");while ($liste_id = mysql_fetch_array($regroupement_identification_id)){echo $liste_id['identification_id'];echo "<br>";} Avis aux amateurs
Spidetra Posté 5 Avril 2006 Posté 5 Avril 2006 (modifié) Lorsque j'ai beaucoup d'état à gérer comme ça, je priviligie les opérateurs sur les bits. Il y a un article complet sur le hub sur cette méthode Les techniques de bit hashing http://www.webmaster-hub.com/publication/article75.html Au lieu d'avoir : code_recherche| identification_id --------------------------------------- 1 |1 1 |2 1 |3 --------------------------------------- 2 |2 2 |3 2 |7 --------------------------------------- J'aurai une seule ligne par identification_id et code recherche correspond à un masque binaire entre les différentes valeurs possible. Ta requête pourrait être du style : SELECT * from tab_recherche WHERE code_recherche = ( CODE_1 & CODE_2 & CODE_3 & etc... ) cela simplifie la requete et la gestion. Par contre du coup il faut que tu réorganise totalement ta table. Modifié 5 Avril 2006 par anorci
ouarzazat Posté 6 Avril 2006 Auteur Posté 6 Avril 2006 Merci pour ta réponse, tu mets le doigt sur une technique très intéressante que je ne connaissais pas et qui présente en effet de belles perspectives. Au boulot! Merci pour ton aide
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant