Как найти один идентификатор с двумя одинаковыми переменными и разными значениями - PullRequest
0 голосов
/ 17 февраля 2019

Я должен получить ID по двум значениям.Итак, скажем, когда я вызываю: id - 2, я получаю два значения 7 и 6. Я хочу позвонить 7 и 6, чтобы получить значение 2

у меня есть таблица recipeingredient , где я должен найти recipe_id 2 с использованием ингредиент_ид 6 и 7

пример:

SELECT * FROM recipeingredient WHERE recipe_id=2

возврат: 6 7

но я хочу поменять местами.

Я думаю, это должно быть эквивалентно:

SELECT * FROM recipeingredient WHERE ingredient_id=6 AND ingredient_id=7

должно возвращаться: 2 , но ничего не возвращает

Подводя итог: на моей странице php, я должен выбрать 2 элемента и получить 1 отображаемое значение.его система TAG.я не могу использовать OR, мне нужно получить значение, которое имеет как значение A, так и значение B.

Ответы [ 5 ]

0 голосов
/ 17 февраля 2019

Вы действительно хотите это:

-- 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(*)

Или это:

-- 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

В обоих запросах пропускаются рецепты, для которых требуется ингредиент, отличный от 6 и 7.

0 голосов
/ 17 февраля 2019

Каким образом ингредиент может быть в одно и то же время равным 6 и 7 (если ваши данные не являются структурными или исключены неатомарные значения), поэтому при использовании предложения AND вы получили o / p как no rows selected.

Лучше использовать пункт IN или OR, они почти одинаковы, но IN позволит избежать повторного и повторного написания в виде функции с параметрами, а не оператора, подобного 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 голосов
/ 17 февраля 2019

Если вы ищете рецепт, который содержит два ингредиента

, вы можете использовать IN и проверить всего 2 ингредиента

    SELECT id 
    FROM recipeingredient 
    WHERE ingredient_id IN (6 ,7)
    group by id 
    having count(distinct ingredient_id ) = 2 
0 голосов
/ 17 февраля 2019

Для реализации фильтра можно использовать агрегацию и предложение HAVING, например:

SELECT recipe_id
FROM recipeingredient
GROUP BY recipe_id
HAVING 
    SUM(ingredient_id=6) > 0
    AND SUM(ingredient_id=7) > 0
0 голосов
/ 17 февраля 2019
SELECT * FROM recipeingredient WHERE ingredient_id=6 OR ingredient_id=7

И покажет вам результаты, когда оба условия выполняются.Вы должны использовать ИЛИ, чтобы проверить оба значения для одного и того же столбца.Строка не может иметь два значения для одного и того же столбца одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...