Как сделать правильно запрос к таблице?

142
02 декабря 2020, 23:40

Как сделать запрос так что бы в результате мне вышла таблица где product_id соответствовал бы одновременно 2 условиям например attribute_id = 12 и attribute_id = 17.

На выходе должна бы получиться таблица с 2 строчками: 1,2;

SELECT pa.product_id FROM product_attribute pa WHERE pa.attribute_id IN (12) AND pa.attribute_id IN (17) 

так конечно же работать не будет, но хоть как то поможет понять суть задачи.

Разве что делать SELECT -> SELECT

Answer 1
SELECT product_id 
FROM product_attribute 
WHERE attribute_id IN (12, 17)
GROUP BY product_id 
HAVING COUNT(DISTINCT attribute_id) = 2

можете расписать схему работы ?

Выделяем (WHERE) записи с заданными значениями attribute_id. Считаем, сколько разных (DISTNCT) attribute_id выделено для каждого product_id (GROUP BY). Оставляем только те product_id (HAVING), для которых посчитанное количество равно количеству разных attribute_id в списке (т.е. для которых присутствует хотя бы по одному разу каждый заданный attribute_id).

Answer 2
SELECT
    pa.product_id
FROM
    product_attribute pa
INNER JOIN
(
    SELECT
        product_id
        ,COUNT(*) Num
    FROM
        product_attribute
    GROUP BY
        product_id
) T ON T.product_id = pa.product_id
WHERE
    attribute_id IN (12, 17)
GROUP BY
    pa.product_id
HAVING
    COUNT(*) = MAX(T.Num)
READ ALSO
Не удается подключиться к базе данных через intellij idea

Не удается подключиться к базе данных через intellij idea

Пытаюсь подключиться к базе данных через intellij idea, при нажатии на test connection получаю ошибку Connection to MySQL - mydb@localhost failed[08001] Could not create connection to database...

132
SELECT * FROM (SELECT …ORDER BY .. LIMIT)

SELECT * FROM (SELECT …ORDER BY .. LIMIT)

Есть MySQL запрос, выглядит так:

92
Вопрос по php циклу

Вопрос по php циклу

Генерирую портфолио на сайте, блоки которые генерируются должны по очереди иметь класс is-left is-right, те

108