Requete Booléene sur table croisée ?

__Nico
Invité n'ayant pas de compte PHPfrance

09 déc. 2008, 10:59

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

__Nico
Invité n'ayant pas de compte PHPfrance

09 déc. 2008, 11:00

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

Eléphant du PHP | 254 Messages

09 déc. 2008, 16:25

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

__Nico
Invité n'ayant pas de compte PHPfrance

09 déc. 2008, 16:29

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....

Eléphant du PHP | 254 Messages

09 déc. 2008, 16:33

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

Eléphant du PHP | 254 Messages

09 déc. 2008, 16:34

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