[RESOLU] Requete SQL

Petit nouveau ! | 4 Messages

21 janv. 2013, 10:35

Bonjour,
J'aurai besoin d'un petit peu d'aide s'il vous plait. Cela semble tout bête et normalement je m'en sors plutôt bien en SQL mais là, je sèche.

J'ai donc 2 tables :
- photo
- photo_keyword

Le champ "photo_id" permet de lier les 2.
Dans photo_keyword, je n'ai que 2 champs : photo_id et key_id

Mon problème est le suivant :
Je souhaite récupérer toutes les photos qui ont les key_id qui m'intéressent. Une photo ayant potentiellement plusieurs entrées dans la table "photo_keyword".

Avec un exemple pour être plus concret :
J'ai joins 2 images. On peut y voir 2 photos, 1 de chaque table.
J'aimerai récupérer toutes les photos qui ont (au moins) comme key_id 8 ET 3, en l'occurrence, la photo_id 24.

Dois-je utiliser un LEFT JOIN, un GROUP BY, un HAVING... suis perdu.
Merci de votre aide.

Poubs.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

ViPHP
ViPHP | 2577 Messages

21 janv. 2013, 12:34

Peut être :
select photo.*
from photo, photo_keyword
where photo.photo_id = photo_keyword.photo_id
and key_id in (1,4,5)
group by  photo_id
having count(*) = 3 
Sachant qu'il faut paramétrer (1,4,5) et 3

Petit nouveau ! | 4 Messages

21 janv. 2013, 12:39

Ca me semble tiré par les cheveux :) mais ça fonctionne !
Merci !

ViPHP
ViPHP | 2577 Messages

21 janv. 2013, 12:46

C'est ce que j'ai de plus simple : compter combien de mots clés sont présents.

Sinon, tu peux faire autant de jointures que de mot recherché au lieu d'une seule.

Petit nouveau ! | 4 Messages

21 janv. 2013, 12:54

J'avais essayé avec plusieurs jointures mais ça n'a pas fonctionné, j'ai du me foirer quelque part.

Petit nouveau ! | 4 Messages

21 janv. 2013, 13:28

Pour info voici une autre solution :

SELECT distinct P.photo_id FROM PHOTO P
WHERE exists ( select 1 from PHOTO_KEYWORD PK1 WHERE PK1.photo_id = P.photo_id and PK1.key_id = 1)
AND exists ( select 1 from PHOTO_KEYWORD PK2 WHERE PK2.photo_id = P.photo_id and PK2.key_id = 2)

Merci de ton aide Mazarini !