Forum-webmaster
Technique - programmation => PHP / MySQL => Message commencé par: pizzaoil le le 11-10-2004 a 14:43:23

Titre: SELECT sur MySQL
Posté par: pizzaoil le le 11-10-2004 a 14:43:23

Voici mon pb:

J'ai une base de données qui ressemble à celle ci:

+----+----------+--------+
| id | option | value |
+----+----------+--------+
| 2 | 411 | 1 |
+----+----------+--------+
| 101| 411 | 1 |
+----+----------+--------+
| 103| 410 | 2 |
+----+----------+--------+
| 2 | 410 | 2 |
+----+----------+--------+

Maintenant je souhaite obtenir le 'id' des enregistrements où
l' option=411 et value=1 ET option=410 et value=2.

En l'occurence dans mon exemple le résultat devrait retourner '2'. J'espere que cela est assez clair.

Merci pour votre aide

Titre: Re:SELECT sur MySQL
Posté par: MarvinLeRouge le le 11-10-2004 a 15:38:51

Salut,

Ta requète devrait ressembler à ça

Code:

select distinct id from table where option=411 and value=1
intersect
select distinct id from table where option=410 and value=2


Malheureusement pour toi, la commande intersect n'est pas encore supportée par MySql
Pb 2 : Tu pourrais émuler intersect avec une sous-requète, mais les sous-requètes ne sont supportées qu'à partir de la version 4.1.

J'ai bien peur que tu sois obligé de faire 2 requète et de faire toi-même le tri en php. :-X

Titre: Re:SELECT sur MySQL
Posté par: pizzaoil le le 11-10-2004 a 16:01:42

Merci bcp!

En supposant que j'ai mysql 4.1 comment devra etre écrite ma sous requete?

Dois je faire appelle à une table temporaire?

Titre: Re:SELECT sur MySQL
Posté par: pizzaoil le le 11-10-2004 a 17:00:02

Effectivement ca marche en 4.1:


Code:
SELECT id
FROM tb1
WHERE id
IN (

SELECT id
FROM tb1
WHERE option = '411' AND value = '1'
) AND option = '410' AND value = '2'


Titre: Re:SELECT sur MySQL
Posté par: erwinol le le 11-10-2004 a 22:11:40

Hein !? mais pourquoi chercher si compliqué ? :o

Une simple requête donne le résultat correct !!


Code:

SELECT T1.id
FROM tbl T1, tbl T2
WHERE T1.id = T2.id /* jointure */
AND T1.option = 411
AND T1.value = 1
AND T2.option = 410
AND T2.value = 2


La principale difficulté (qui n'en est pas réellement une) est de faire la jointure entre les 2 tables. Cette requête devrait fonctionner parfaitement sur toute version de mySQL.

Titre: Re:SELECT sur MySQL
Posté par: MarvinLeRouge le le 11-10-2004 a 22:46:40

Personnellement je rajouterai un distinct, car la colonne qui se nomme id n'est pas une clé primaire, donc il peut y avoir plusieurs résultats identiques.
cf 1ère et dernière lignes de la table fournie en exemple.

Titre: Re:SELECT sur MySQL
Posté par: pizzaoil le le 12-10-2004 a 10:03:46

Effectivement celle si fonctionne également! et le distinct est nécessaire Merci!

Par contre si je veux rentrer un nouveau critère je dois obligatoirement écrire une autre jointure. N'est ce pas? et une autre "table Tn".

Titre: Re:SELECT sur MySQL
Posté par: erwinol le le 13-10-2004 a 21:40:46

Citation de: MarvinLeRouge le le 11-10-2004 a 22:46:40
Personnellement je rajouterai un distinct, car la colonne qui se nomme id n'est pas une clé primaire, donc il peut y avoir plusieurs résultats identiques.
cf 1ère et dernière lignes de la table fournie en exemple.


Effectivement j'avais pas fait gaffe. Cela dit je donne l'apect de la requête, c'est à celui qui l'utilise de l'adapter à ses besoins :)


Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.