Page 1 sur 1

[MySQL] Intersection difficile

Posté : 21 févr. 2007, 19:59
par FloBaoti
Salut à tous!

J'ai un petit doute en SQL là :?
Je bosse sur MySQL, donc pas de INTERSECT possible ...

J'ai une table dans ce genre:
(mot,site)
avec des valeurs:
(1,1)
(2,1)
(3,1)
(1,2)

Et je voudrais récupérer les valeurs de site pour lesquels il y a à la fois mot=1 et mot=2
Vous voyez un peu ?

Dans cet exemple, il me faudrait récupérer site=1 comme valeur, mais pas site=2 car il n'a pas mot=2.

Vous avez une idée de comment faire ça ? Ca me paraissait simple au départ, mais soit je suis trop fatigué, soit je sèche vraiment.

Merci par avance,
@++

Re: [MySQL] Intersection difficile

Posté : 22 févr. 2007, 18:30
par mere-teresa
Et je voudrais récupérer les valeurs de site pour lesquels il y a à la fois mot=1 et mot=2
Vous voyez un peu ?

Code : Tout sélectionner

SELECT site FROM table WHERE mot= 1 AND mot = 2

Posté : 22 févr. 2007, 18:48
par FloBaoti
Kikoo,

Ce n'est pas si simple justement!

Avec cette requete, il faudrait 2 champs différents, mot1 et mot2. Or avec un seul champ mot, il ne peut pas exister une ligne avec à la fois mot=1 et mot=2.
Exemple:
Personne, Residence
-----------------------
Patrick, Paris
Patrick, Marseille
Georges, Paris

Et je veux les personnes qui ont une résidence à Paris, ET une à Marseille.
Mais pour chaque ligne, "Residence" vaudra soit l'un, soit l'autre mais jamais les 2.

C'est pour ça que l'idée d'intersection m'est venu, mais peut-être qu'il existe une autre manière.

Hier soir en m'endormant, j'ai pensé à un truc:

Code : Tout sélectionner

SELECT e1.page_id FROM engine AS e1, engine AS e2 WHERE e1.keyword='1' AND e2.keyword='2' AND e1.page_id = e2.page_id
Ca fonctionne parfaitement, par contre la jointure est pas mal lourde, surtout que c'est pour déployer sur une grosse archi. Et il peut y avoir plusieurs jointures si plusieurs valeurs de mot recherchées.
J'ai pensé à faire cette intersection en PHP, mais ça multiplie le nombre de requêtes à faire (sélectionner toutes les valeurs de sitemot=1, puis toutes les valeurs de sitemot=2
Mais c'est lourd également en PHP.

Si quelqu'un a une autre idée, je suis prenneur, sinon tant pis.

Merci d'avance,
@++