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