Page 1 sur 1

Requête SQL difficile

Posté : 27 avr. 2016, 13:04
par Dataes
Bonjour,
J'ai une table intermédiaire entre pizza et ingrédients (4 ingredients), cette table intermédiaire contient l'id des pizzas et l'id des ingrédients correspondant. Exemple :
idPizza > idIng
[15] > [1]
[15] > [2]
[15] > [3]
[15] > [4]
(La pizza 15 contient les ingrédients 1,2,3 et 4)

Ma requête :
SELECT pizza_id , GROUP_CONCAT(ingredients_id) AS iid
FROM pizza_has_ingredients phi
GROUP BY pizza_id

Le résultat (exemple):
pizza_id = 15
iid=1,2,3,4

J'ai besoin de trouver l'id d'une pizza (15) grace à un WHERE ingredients_id=1 AND ingredients_id=2 ect....

La requête retourne un résultat vide, si je met que "WHERE ingredients_id=1", le résultat sortant est toutes les pizzas contenant l'ingrédient 1, chaque pizza a une combinaison d'ingrédients unique seulement le problème c'est bien l'agencement voir plus haut (15>1,15>2 ect...)
(Je n'arrive pas non plus avec LIKE)

Quelqu'un pourrait m'aider ? :o
Merci

Re: Requête SQL difficile

Posté : 27 avr. 2016, 15:30
par Spols
Si le nombre d'ingrédient est fixe, tu peux faire 4 LEFT join vers ta table ingrédient avec un critère que l'id doit toujours être plus grands que le précédent. Tu pourra alors triéer tes résultats plus finement

Re: Requête SQL difficile

Posté : 27 avr. 2016, 18:02
par Dataes
Salut Spols,
J'ai compris l'idée, le nombre d'ingrédients n'est pas fixe, mais j'imagine pouvoir incrémenter la requête.
Je reviens vers toi dès que possible, merci encore.

Re: Requête SQL difficile

Posté : 28 avr. 2016, 09:39
par Dataes
Cela ne convient pas. :(
Avec plusieurs left join cela multiplie l'affichage des ids ingredients.

Re: Requête SQL difficile

Posté : 29 avr. 2016, 04:50
par Genova
Salut,

Il suffit de compter pour chaque pizza le nombre d'ingrédients qui correspondent à ceux que tu cherches (tu cherches les ingrédients 1, 2, 3 et 4 dans l'exemple ci dessous), et ce nombre doit être égal au total d'ingrédients que tu cherches (donc 4 dans l'exemple).
SELECT pizza_id, COUNT(*) as total
FROM pizza_has_ingredients
WHERE ingredients_id IN (1, 2, 3, 4)
GROUP BY pizza_id
HAVING total = 4;

Re: Requête SQL difficile

Posté : 29 avr. 2016, 10:23
par Dataes
YOUHOU :D
Merci GENOVA ! Je rajoute juste un LIMIT 1 à la fin et c'est parfait !
Génial =D>