Page 1 sur 1

Retourner les ID différents de...

Posté : 16 oct. 2014, 15:11
par Furax
Bonjour,

J'ai un souci avec une requête SQL qui ne fonctionne que dans un sens...
Dans le principe j'ai 3 tables:
- Recettes
- Types
- Personnes_recettes qui fait la relation entre les personnes et les recettes qui leur ont déjà été faites. (par exemple l'IDPersonne 17 va avec le plat d'ID 10)

Je veux faire une requête qui soit me retourne tous les plats faits pour une personne, soit l'inverse, les plats pas encore fait pour une personne.
SELECT DISTINCT r.id, r.titre, r.id_type, t.type FROM recettes r, personnes_recettes p, types t WHERE p.id_personne='18' AND r.id=p.id_recette AND t.id=r.id_type
Si je laisse "r.id=p.id_recette" il me sort bien le résultat qu'il faut
En revanche si je mets "r.id!=p.id_recette", alors là il me sort tous les résultats, même ceux qui sont égaux

Une idée?

merci!

Re: Retourner les ID différents de...

Posté : 16 oct. 2014, 16:40
par fab'blab
Salut,

Si j'ai bien compris ce que tu cherches à faire, la bonne requête serait plutôt :
SELECT DISTINCT r.id, r.titre, r.id_type, t.type FROM recettes r, personnes_recettes p, types t WHERE p.id_personne!='18' AND r.id=p.id_recette AND t.id=r.id_type

Re: Retourner les ID différents de...

Posté : 16 oct. 2014, 17:14
par fab'blab
Hum non en fait la requête que j'ai proposée provoquera la même erreur :(

Une autre solution sera peut-être de passer par une sous-requête plutôt qu'une jointure, exemple :
SELECT DISTINCT r.id, r.titre, r.id_type, t.type FROM recettes r, types t WHERE  r.id_recette not in (SELECT DISTINCT id_recette from personnes_recettes where id_personne='18')  AND r.id=p.id_recette AND t.id=r.id_type
A tester...

Ou bien regarder du côté des jointures de type "LEFT JOIN" et "RIGHT JOIN"
Un bon tuto : http://www.epershand.net/developpement/ ... join-mysql

Re: Retourner les ID différents de...

Posté : 16 oct. 2014, 17:27
par yann18
une autre proposition
SELECT DISTINCT r.id, r.titre, r.id_type, t.type FROM recettes r
JOIN types t ON t.id=r.id_type
LEFT JOIN personnes_recettes p ON r.id=p.id_recette
WHERE p.id_recette IS NULL OR p.id_recette=''
AND p.id_personne=18

Re: Retourner les ID différents de...

Posté : 17 oct. 2014, 10:26
par Furax
Merci pour ces réponses.
J'ai modifié un peu la première solution car elle ne fonctionnait pas directement (pas facile sans avoir les tables sous les yeux ;)).

Voici une requête qui fonctionne au poil:
SELECT DISTINCT r.id, r.titre, r.id_type, t.type FROM recettes r, types t WHERE r.id NOT IN (SELECT DISTINCT id_recette FROM personnes_recettes WHERE id_personne=17) AND t.id=r.id_type ORDER BY t.ordre ASC, r.titre ASC
Merci beaucoup!
Je vais aller lire le tuto sur les jointures car ça a toujours été mon problème ça, et je vais en avoir sérieusement besoin pour la suite de mon projet...

Re: Retourner les ID différents de...

Posté : 17 oct. 2014, 11:14
par moogli
Modération :
Si ta question est résolue, pense à l'indiquer pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.
Tu peux réaliser cette opération toi-même en cliquant sur le bouton vert "Mettre le sujet en tant que Résolu" situé en haut de la page à côté du titre du sujet.

Re: [RESOLU] Retourner les ID différents de...

Posté : 17 oct. 2014, 14:51
par Furax
Autant pour moi je n'avais pas fait attention qu'il y avait un tel bouton.