Mysql 无论如何,这不是答案。若您还有其他问题,请在新请求中询问。若我不使用DISTINCT,则会将行与product_options表中的行相乘。我尝试过不使用它,它返回的是与之相乘的真实结果。然后,查询出现了严重问题。您可以按id进行分组。我想这应该是p.id

Mysql 无论如何,这不是答案。若您还有其他问题,请在新请求中询问。若我不使用DISTINCT,则会将行与product_options表中的行相乘。我尝试过不使用它,它返回的是与之相乘的真实结果。然后,查询出现了严重问题。您可以按id进行分组。我想这应该是p.id,mysql,sql,database,Mysql,Sql,Database,无论如何,这不是答案。若您还有其他问题,请在新请求中询问。若我不使用DISTINCT,则会将行与product_options表中的行相乘。我尝试过不使用它,它返回的是与之相乘的真实结果。然后,查询出现了严重问题。您可以按id进行分组。我想这应该是p.id?是否另一个表在DBMS中有一个列id?如果它是p.id您分组依据并选择p.id,则不能有重复的行,因为每一行都有一个唯一的p.idDISTINCT将是多余的。此外,查询存在缺陷。至少您可以将图像计数与选项x类别的数量相乘。在连接前进行聚合。


无论如何,这不是答案。若您还有其他问题,请在新请求中询问。若我不使用DISTINCT,则会将行与product_options表中的行相乘。我尝试过不使用它,它返回的是与之相乘的真实结果。然后,查询出现了严重问题。您可以按
id
进行分组。我想这应该是
p.id
?是否另一个表在DBMS中有一个列
id
?如果它是
p.id
您分组依据并选择
p.id
,则不能有重复的行,因为每一行都有一个唯一的
p.id
DISTINCT
将是多余的。此外,查询存在缺陷。至少您可以将图像计数与选项x类别的数量相乘。在连接前进行聚合。
SELECT DISTINCT p.id AS id,
                ...
FROM products p
LEFT JOIN product_categories pc ON p.id = pc.product_id
LEFT JOIN product_images pi ON p.id = pi.product_id
LEFT JOIN product_options po ON p.id = po.product_id
WHERE p.product_active = 1
  AND po.option_id = 1 // only to get the idea
GROUP BY id
ORDER BY id DESC
LIMIT 0,
      12
SELECT p.id AS id,  ...
FROM products p JOIN
     product_categories pc
     ON p.id = pc.product_id LEFT JOIN
     product_images pi
     ON p.id = pi.product_id JOIN
     product_options po
     ON p.id = po.product_id
WHERE p.product_active = 1 AND
      po.option_id IN (4, 6)
GROUP BY p.id
HAVING COUNT(DISTINCT po.option_id) = 2
ORDER BY p.id DESC
LIMIT 0, 12;
SELECT DISTINCT p.id AS id
FROM products p
JOIN product_options po ON p.id = po.product_id
WHERE p.product_active = 1
      AND po.option_id IN (1, 2, 3)
GROUP BY p.id
HAVING COUNT(po.option_id) = 3
SELECT DISTINCT p.id AS id
FROM products p
JOIN product_options po ON p.id = po.product_id
WHERE p.product_active = 1 AND 
      po.option_id IN (1, 2, 3) and
      NOT EXISTS (
        SELECT 1
        FROM product_options po2
        WHERE p.id = po2.product_id and po2.option_id NOT IN (1, 2, 3)
      )
GROUP BY p.id
HAVING COUNT(po.option_id) = 3
SELECT DISTINCT p.id AS id
FROM products p
JOIN product_options po ON p.id = po.product_id
WHERE p.product_active = 1 AND 
      po.option_id IN (1, 2, 3) AND
      -- use the following IN predicate to select products with specific features without introducing duplicates in your query
      p.id IN (
         select product_id FROM product_categories WHERE <your_condition>
      )
GROUP BY p.id
HAVING COUNT(po.option_id) = 3
select products.*, group_concat(product_images.id)
select
  p.*,
  (select group_concat(image) from product_images i where i.product_id = p.id) as images
from products p
where product_active = 1
and id in
(
  select product_id
  from product_options
  where option_id in (1,3,55,97)
  group by product_id
  having count(*) = 4 -- four options in this example
);
SELECT DISTINCT p.id AS id,
                main_price,
                promotion_price,
                NEW,
                sale,
                recommended,
                COUNT(pi.filename) AS image_count,
                GROUP_CONCAT(DISTINCT pi.filename
                             ORDER BY pi.main_image DESC, pi.id ASC) AS images,
                name_sr,
                uri_sr,
                description_sr
FROM products p
LEFT JOIN product_categories pc ON p.id = pc.product_id
LEFT JOIN product_images pi ON p.id = pi.product_id
LEFT JOIN product_options po ON p.id = po.product_id
WHERE p.product_active = 1
  AND po.option_id IN(1)
  AND p.main_price BETWEEN 5250.00 AND 14000.00
GROUP BY id
HAVING COUNT(DISTINCT po.option_id) = 1
ORDER BY id DESC
LIMIT 0,
      12
SELECT COUNT(DISTINCT p.id) AS number
FROM products p
LEFT JOIN product_categories pc ON p.id = pc.product_id
LEFT JOIN product_images pi ON p.id = pi.product_id
LEFT JOIN product_options po ON p.id = po.product_id
WHERE p.product_active = 1
  AND po.option_id IN(1)
  AND p.main_price BETWEEN 5250.00 AND 14000.00
GROUP BY(p.id)
HAVING COUNT(DISTINCT po.option_id) = 1