这是从单个表中的简单选择。目的是选择四个随机产品,一个来自x个类别中的每一个,具有几个“在哪里”的限制。我试过这个:
SELECT pName,
pID
from products
WHERE pDisplay=1
AND pFeatured=1
GROUP BY pCategory
ORDER BY RAND()
LIMIT 0,4
这种作品,但它总是从任何给定的类别返回相同的产品。我想改变所显示的产品,同时仍然只显示任何给定类别的单个产品。
我也尝试过:
SELECT DISTINCT(pCategory)
pName,
pID
from products
WHERE pDisplay=1
AND pFeatured=1
ORDER BY RAND()
LIMIT 0,4
我想也许它需要两个选择 - 第一个获得随机的4个类别第二个从每个选择一个随机行,但是a。我不知道该怎么做,而且b。如果可能,我宁愿使用单个查询。
答案 0 :(得分:2)
不是很好,但我认为这是你在MySQL中可以做的最好的事情。
SELECT p.pID, p.pName
FROM (
SELECT (
SELECT pID FROM products
WHERE pCategory=p.pCategory AND pDisplay=1 AND pFeatured=1
ORDER BY rand() LIMIT 1
) AS pID
FROM products p
WHERE pDisplay=1 AND pFeatured=1
GROUP BY pCategory
ORDER BY rand() LIMIT 4
) c
JOIN products p ON c.pID = p.pID
(karim79的查询可以返回同一类别的多个产品,甚至可能是pDisplay = 0或pFeatured = 0的产品.rexem的查询处理pDisplay / pFeatures问题,但也可以返回同一类别的多个产品)