小编典典

选择随机行,但一列中没有重复的值

sql

这是从单个表中进行的简单选择。目的是选择四个随机乘积,从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。如果可能,希望使用单个查询。


阅读 163

收藏
2021-04-07

共1个答案

小编典典

不太好,但是我认为这是在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问题,但也可以返回同一类别的多个产品)

2021-04-07