选择随机行,但不要复制一列中的值

时间:2009-10-03 01:41:11

标签: sql mysql

这是从单个表中的简单选择。目的是选择四个随机产品,一个来自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。如果可能,我宁愿使用单个查询。

1 个答案:

答案 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问题,但也可以返回同一类别的多个产品)