MySQL Query - несколько предложений WHERE в 1 столбце - PullRequest
6 голосов
/ 17 августа 2011

Может кто-нибудь помочь мне создать запрос на основе запроса ниже.

Как вы можете видеть, у меня есть продукт со спецификациями и определенными группами, которые создаются в интерфейсе. Я знаю проблему, 1 столбец не может быть 2 значениями одновременно, но мне нужны только те продукты, которые входят в эти 2 группы.

Чтобы проиллюстрировать, product_specification_sid, id 2 3 и 4 - это размеры, а остальные 8 ~ 11 - цвета, поэтому я бы хотел выбрать продукт с 2 и 3.

Внутреннее присоединение к таблице double не вариант, поскольку в будущем группы (размеры, цвета) могут отличаться.

SELECT
    products.*,
    categories.*,
    manufacturers.* 
FROM products
INNER JOIN  product_categories ON product_category_pid = product_id
INNER JOIN  categories ON product_category_cid = category_id
INNER JOIN  manufacturers ON product_manufacturer = manufacturer_id
INNER JOIN  product_specifications ON product_specification_pid=product_id
WHERE 
    product_active = 1  
AND 
(
    product_specification_sid in (3)  
AND  
    product_specification_sid in (8,9,6,7,10,11)  
) 
GROUP BY product_id

Ответы [ 2 ]

5 голосов
/ 17 августа 2011

Вместо этого вы можете использовать пункт имения.

SELECT
    products.*,
FROM products
INNER JOIN  product_categories ON product_category_pid = product_id
INNER JOIN  categories ON product_category_cid = category_id
INNER JOIN  manufacturers ON product_manufacturer = manufacturer_id
INNER JOIN  product_specifications ON product_specification_pid=product_id
WHERE product_active = 1  
GROUP BY product_id
HAVING COUNT(CASE WHEN product_specification_sid in (3) THEN 1 END) > 0
 AND COUNT(CASE WHEN product_specification_sid in (8,9,6,7,10,11) THEN 1 END) > 0
1 голос
/ 17 августа 2011

Насколько я понимаю, вы ищете запись продукта, в которой есть две соответствующие записи product_specification, отвечающие определенным условиям.Мне кажется, что простое решение таково:

SELECT products.*, categories.*, manufacturers.*  
FROM products
INNER JOIN  product_categories ON product_category_pid = product_id
INNER JOIN  categories ON product_category_cid = category_id
INNER JOIN  manufacturers ON product_manufacturer = manufacturer_id
INNER JOIN  product_specifications ps1 ON ps1.product_specification_pid=product_id
INNER JOIN  product_specifications ps2 ON ps2.product_specification_pid=product_id
WHERE      product_active = 1
  AND  ps1.product_specification_sid in (3)
  AND  ps2.product_specification_sid in (8,9,6,7,10,11)

Кстати, эта «группа по» не будет работать.Вы должны сгруппировать все, что не является агрегатом, и в каждой таблице должен быть хотя бы один столбец, поэтому у вас должно быть как минимум три неагрегата.(Ну, может быть, MySQL имеет здесь какое-то расширение, но в стандартном SQL это будет необходимо).

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