Page 1 sur 1

Requete SQL

Posté : 21 janv. 2013, 10:35
par poubs
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.

Re: Requete SQL

Posté : 21 janv. 2013, 12:34
par Mazarini
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

Re: Requete SQL

Posté : 21 janv. 2013, 12:39
par poubs
Ca me semble tiré par les cheveux :) mais ça fonctionne !
Merci !

Re: Requete SQL

Posté : 21 janv. 2013, 12:46
par Mazarini
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.

Re: Requete SQL

Posté : 21 janv. 2013, 12:54
par poubs
J'avais essayé avec plusieurs jointures mais ça n'a pas fonctionné, j'ai du me foirer quelque part.

Re: Requete SQL

Posté : 21 janv. 2013, 13:28
par poubs
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 !