[MySQL] Intersection difficile

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [MySQL] Intersection difficile

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

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,
@++

Re: [MySQL] Intersection difficile

par mere-teresa » 22 févr. 2007, 18:30

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

[MySQL] Intersection difficile

par FloBaoti » 21 févr. 2007, 19:59

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,
@++