这是从单个表中进行的简单选择。目的是选择四个随机乘积,从x个类别的每一个类别中选择一个,并具有几个“ where”限制。我已经试过了:
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。如果可能,希望使用单个查询。
不太好,但是我认为这是在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问题,但也可以返回同一类别的多个产品)