У меня есть база данных списков. У меня также есть база данных listings_attributes, которая выглядит следующим образом:Поиск данных столбцов в таблице MySQL
id | listing_id | attribute_id
В принципе в listings_attributes таблице хранятся атрибуты, которые назначены на определенный список.
Я хочу фильтровать списки в зависимости от того, какие атрибуты у них есть.
Примером может быть я хочу найти все списки с атрибутом_ид из 1. Это очень просто.
SELECT l.id FROM listings AS l
LEFT JOIN listings_attributes AS la ON l.id = la.listing_id
WHERE la.attribute_id = 1
GROUP BY l.id
Что моя проблема в том, как я достаю списки, которые имеют в attribute_id от 1 и 2. Если есть списки с attribute_id 1, но не имеет attribute_id из 2, я не хотите, чтобы их вытащили из базы данных.
Однако, если есть списки с атрибутом_id из 1, 2 и 3, я бы хотел, чтобы их вытащили из базы данных.
Вот мой SQL, с которым я играл, но «OR» между атрибутами не работает, и ни «AND», ни «AND».
SELECT l.id FROM listings AS l
LEFT JOIN listings_attributes AS la ON l.id = la.listing_id
WHERE (la.attribute_id = 1 OR la.attribute_id = 2)
GROUP BY l.id
Какой код мне нужен, чтобы он работал так, как я объяснил выше?
Thanks Chris! Есть ли способ сделать HAVING COUNT (*) = 2 более конкретным? У меня на самом деле есть несколько LEFT JOINS в моем коде, и я думаю, что это может быть запутано. –
На самом деле, я думаю, что я просто ошибаюсь. Похоже, он работает :) Спасибо за вашу помощь! –