Jointure et sélection par count
Bonjour,
Je suis confronté à un petit problème qui m'empêche d'avancer donc je fais appel à vous :oops:
J'ai 2 tables, recettes et ingredients. La table ingrédient contient l'ID de la recette. Elle est composée de plusieurs lignes représentant les ingrédients. Seulement un ingrédient peu apparaitre plusieurs fois dans la recette.
Je souhaite, dans le cadre d'un moteur de recherche, trouver toutes les recettes contenant de 1 à N ingrédients.
Ma requete, qui ne fonctionne pas est la suivante :
Code:
1 2 3 4 5 6 7 8
|
SELECT DISTINCT rct_id
FROM recettes
JOIN ingredients ON (rct_id = ing_fk_rct_id)
WHERE ing_id IN (761, 765) -- Identifiant des ingrédients à trouver
GROUP BY rct_id
HAVING COUNT(*) = 2
ORDER BY rct_nom; |
Je dois évidemment trouver les recettes contenant TOUS les ingrédients choisis. C'est pour cela que ma requete ne convient pas. Car dans ce cas, elle peut me retourner les recettes contenant les 2 ingrédients mais aussi celles qui contiennent 2 fois le même ! C'est ce dernier point que je dois enlever.
J'ai donc fais une autre requête qui je pense est beaucoup moins optimisée mais qui fonctionne :D
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
SELECT rct_id, rct_titre
FROM recettes
WHERE rct_id IN (
SELECT ing_fk_rct_id
FROM ingredients
WHERE ing_id = 761
INTERSECT
SELECT ing_fk_rct_id
FROM ingredients
WHERE ing_id = 765
)
ORDER BY rct_id
; |
Est-ce que la deuxième est quand même correcte ?
Ne va-t-elle pas devenir trop gourmande si le nombre d'ingrédients à rechercher augmente ?