1
votes

Comment trouver un identifiant avec, deux mêmes variables et des valeurs différentes

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 commentaires

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 . Il vous suffit de remplacer AND par OR pour le faire vérifier soit 6 ou 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!


5 Réponses :


0
votes
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.

1 commentaires

Cela renverra toute recette qui a 6 ou 7 mais pas nécessairement où la recette a à la fois 6 et 7



1
votes

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 


0 commentaires

2
votes

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


0 commentaires

0
votes

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


0 commentaires

1
votes

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 .


0 commentaires