Page 1 sur 1

Requete Booléene sur table croisée ?

Posté : 09 déc. 2008, 10:59
par __Nico
Bjour,
j'aurais besoin de vos lumières pour une requete mysql que je n'arrive pas à écrire.

J'ai 3 tables :
1 table fichier
1 table mot
1 table lien_mot_fichier

1 fichier possède x mots et les ids sont renseignés dans la table lien_mot_fichier.

je voudrais faire des requêtes de type : retourne moi tous les fichiers possédant le mot A ou le mot B, là j'y arrive.
par contre si je veux les fichiers qui contiennent A et B, là je cale...
si je fais la jointure sur les tables je ne travaille que sur une occurence du mot.

merci de vos conseils

Re: Requete Booléene sur table croisée ?

Posté : 09 déc. 2008, 11:00
par __Nico
Au fait c'est du php5/mysql5
Bjour,
j'aurais besoin de vos lumières pour une requete mysql que je n'arrive pas à écrire.

J'ai 3 tables :
1 table fichier
1 table mot
1 table lien_mot_fichier

1 fichier possède x mots et les ids sont renseignés dans la table lien_mot_fichier.

je voudrais faire des requêtes de type : retourne moi tous les fichiers possédant le mot A ou le mot B, là j'y arrive.
par contre si je veux les fichiers qui contiennent A et B, là je cale...
si je fais la jointure sur les tables je ne travaille que sur une occurence du mot.

merci de vos conseils

Posté : 09 déc. 2008, 16:25
par furiouslol
Salut,

Je ne connais pas ta requete originale, mais il y a de forte chance qu'un

Code : Tout sélectionner

group by id_fichier
suivit d'un

Code : Tout sélectionner

having count(id_mot)=nombre de mot
fonctionne dessus. Cela suppose évidement de connaitre ce chiffre (le nombre de mots recherché, mais ce traitement peut etre fait au préalable en php)

Je pensais faire une INTERSECTION mais cette commande n'a pas l'air d'etr supportée en mysql, quelqu'un a t'il des infos dessus ?

Bon sinon y a surement d'autres manieres de faire

Posté : 09 déc. 2008, 16:29
par __Nico
Salut,

Je ne connais pas ta requete originale, mais il y a de forte chance qu'un

Code : Tout sélectionner

group by id_fichier
suivit d'un

Code : Tout sélectionner

having count(id_mot)=nombre de mot
fonctionne dessus. Cela suppose évidement de connaitre ce chiffre (le nombre de mots recherché, mais ce traitement peut etre fait au préalable en php)

Je pensais faire une INTERSECTION mais cette commande n'a pas l'air d'etr supportée en mysql, quelqu'un a t'il des infos dessus ?

Bon sinon y a surement d'autres manieres de faire
Merci pour ton avis mais on ne va retourner que les résultats ayant le même nombre de mots que dans la recherche ?
Je suis parti sur le principe de dissocier chacune des recherches sur 1 mot et de fusionner les tableaux de résultats, pas top mais ça fonctionne....

Posté : 09 déc. 2008, 16:33
par furiouslol
Merci pour ton avis mais on ne va retourner que les résultats ayant le même nombre de mots que dans la recherche ?
Ben si tu veux bien les fichiers qui contiennent tous les mots de ta recherche, oui

Posté : 09 déc. 2008, 16:34
par furiouslol
BOn ce ci dit si t'es partit sur une solution séparée ... Je pensais que tu avais fais la requete avec le OU en une seule requete