Problème mysql avec WHERE toto in (var1,var2,var3,…)

Répondre
mamoute
le 19/07/2007 à 19:20
mamoute
Bonjour à tous

J'ai une table du genre:

+-------------+------------+------------------+
| product_id | options_id | option_value_id |
+-------------+------------+------------------+
| 58             | 10            | 1                    |
| 58             | 11            | 6                    |
| 58             | 12            | 8                    |
| 58             | 15            | 12                  |
| 58             | 20            | 7                    |
| 58             | 6              | 10                  |
| 59             | 4              | 18                  |
| 59             | 12            | 20                  |
| 59             | 10            | 1                    |
| …              | …              | …                   |
+-------------+-------------+-----------------+

Je fais une requête sur celle-ci du genre
SELECT product_id FROM table WHERE option_value_id in (6,12,10)

Mais ça ne convient pas.

En fait ce qu'il me faudrait c'est que je puisse obtenir le "product_id"
qui vérifie les trois valeurs en même temps (6 & 12 & 10)…

Si je fais WHERE option_value_id = 6 AND option_value_id = 12 AND…
ça ne fonctionne pas plus.

Est-ce qu'il existe une autre méthode?

Merci d'avance pour votre (précieuse) aide.

arno
[°]¿[°] -- arno
LA GLOBULE
le 19/07/2007 à 19:54
LA GLOBULE
Si je fais WHERE option_value_id = 6 AND option_value_id = 12 AND…
ça ne fonctionne pas plus.

C'est pourtant la bonne méthode à employer.
mamoute
le 20/07/2007 à 15:56
mamoute
Désolé d'être insistant mais j'ai essayé avec un cas très simple
de sortir deux occurrences différentes d'une même colonne
c'est impossible!!

Je ne comprends pas où le bas blesse?
[°]¿[°] -- arno
LA GLOBULE
le 20/07/2007 à 17:13
LA GLOBULE
Effectivement, j'avais mal lu ton problème.

Voici une solution que je te propose : faire des OU et compter le nombre d'occurrences des résultats.

Exemple, voici ma table :

mysql> SELECT * FROM test;
+------------+-----------------+
| product_id | option_value_id |
+------------+-----------------+
| 58 | 1 |
| 58 | 6 |
| 58 | 3 |
| 59 | 6 |
+------------+-----------------+
4 rows in set (0.00 sec)


Et voici la requete que je te propose :

mysql> SELECT count(product_id) AS nb, product_id FROM test WHERE option_value_id = 6 OR option_value_id = 1 GROUP BY product_id;
+----+------------+
| nb | product_id |
+----+------------+
| 2 | 58 |
| 1 | 59 |
+----+------------+
2 rows in set (0.00 sec)


Dans ma requete, j'ai un OU avec 2 conditions :
- si dans mon resultat, j'ai un champ 'nb' qui vaut 2 c'est que les deux conditions sont remplis
- si 'nb' ne vaut pas 2, toutes les conditions ne sont pas réunies

Si tu as deux OU, donc 3 valeurs différentes, 'nb' devra valoir 3 pour etre sur que ce product_id prend bien les 3 valeurs possibles.
mamoute
le 20/07/2007 à 18:42
mamoute
Formidable!!! C'est tout bon.

Un immense MERCI à toi La Globule!!!
smiley
[°]¿[°] -- arno
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours