Je dois obtenir un identifiant par deux valeurs. Alors disons que quand j'appelle: id - 2 j'obtiens deux valeurs 7 et 6. Je veux appeler 7 et 6 pour obtenir la valeur 2
J'ai la table recette de recette où je devrais trouver recette_id 2 en utilisant ingrédient_id 6 et 7
exemple:
SELECT * FROM recipeingredient WHERE ingredient_id=6 AND ingredient_id=7
renvoie: 6 7
mais je veux inversé.
je pense que cela devrait être équivalent à:
SELECT * FROM recipeingredient WHERE recipe_id=2
devrait retourner: 2 mais ne renvoie rien p>
pour résumer: sur ma page web php, je dois sélectionner 2 éléments et obtenir 1 valeur affichée. son système TAG. je ne peux pas utiliser OR, j'ai besoin d'obtenir une valeur qui a pour valeur A donc valeur B.
5 Réponses :
SELECT * FROM recipeingredient WHERE ingredient_id=6 OR ingredient_id=7 AND will show you results when both conditions are true. You should use OR to check for both values for same column. A row cannot have two values for same column at the same time.
Cela renverra toute recette qui a 6 ou 7 mais pas nécessairement où la recette a à la fois 6 et 7
Si vous recherchez une recette contenant les deux ingrédients
vous pouvez utiliser IN et cherchez seulement 2 ingrédients
SELECT id FROM recipeingredient WHERE ingredient_id IN (6 ,7) group by id having count(distinct ingredient_id ) = 2
Vous pouvez utiliser l'agrégation et une clause HAVING pour implémenter le filtre, comme:
SELECT recipe_id FROM recipeingredient GROUP BY recipe_id HAVING SUM(ingredient_id=6) > 0 AND SUM(ingredient_id=7) > 0
Comment un ingrédient peut-il être à la fois 6 et 7 (à moins que vos données ne soient des valeurs non structurelles ou non atomiques délimitées) c'est pourquoi en utilisant la clause AND
vous avez reçu o / p comme aucune ligne sélectionnée
.
La meilleure option est d'utiliser la clause IN
ou OR
les deux sont presque similaires mais IN
éviterait utilisation de l'écriture encore et encore comme une fonction avec des paramètres et non un opérateur comme OR
SELECT * FROM recipeingredient WHERE ingredient_id IN (6,7) --using IN clause SELECT * FROM recipeingredient WHERE ingredient_id=6 OR ingredient_id=7 -- using OR
Vous voulez en fait ceci:
-- all recipes that could be prepared with exactly 6 and 7 SELECT recipe_id FROM recipeingredient GROUP BY recipe_id HAVING COUNT(CASE WHEN ingredient_id IN (6, 7) THEN 1 END) = 2 AND COUNT(*) = 2
Ou ceci:
-- all recipes that could be prepared with 6 and/or 7 SELECT recipe_id FROM recipeingredient GROUP BY recipe_id HAVING COUNT(CASE WHEN ingredient_id IN (6, 7) THEN 1 END) = COUNT(*)
Les deux requêtes ignorent les recettes qui nécessitent un ingrédient autre que 6 et 7 .
Un ingrédient in ne peut pas être à la fois 6 et 7 en même temps
Pensez-y logiquement. Un seul ingrédient dans une recette ne peut pas être à la fois sel et poivre , mais il peut être ou i >. Il vous suffit de remplacer
AND
parOR
pour le faire vérifier soit6
ou i >7
:SELECT * FROM recette ingrédient WHERE ingrédient_id = 6 OU ingrédient_id = 7
donc mon ami a construit cette base de données pour un projet de groupe. J'ai juste besoin de sélectionner 2 valeurs et d'obtenir des données. OU n'aidera pas. je modifierai ma question
@DrSkull pas besoin de réponses valides de gmb et scaisedge.
Désolé, j'ai mal compris cette partie de votre question. Quoi qu'il en soit, comme l'a dit P.Salmon, vous avez maintenant deux bonnes et valables réponses!