Bonjour,
Je suis confronté à un petit problème qui m'empêche d'avancer donc je fais appel à vous![]()
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 sql : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?
Partager