Aller au contenu

Lister les entrées redondantes


ouarzazat

Sujets conseillés

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!!

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

Posté (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é par ouarzazat
Lien vers le commentaire
Partager sur d’autres sites

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é par Bolbo
Lien vers le commentaire
Partager sur d’autres sites

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 ;)

Lien vers le commentaire
Partager sur d’autres sites

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é par anorci
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...