2009-10-03 106 views
3

这是一个简单的从单个表中选择。目的是选择四个随机产品,每个产品有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 

我想,也许它需要两个选择-THE首先要得到一个随机4类第二选择从他们每个人,但一排随机。我不知道如何做到这一点,和b。如果可能的话,宁愿使用单个查询。

回答

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

+0

谢谢!这是完美的 - 对于前一个,你确实是对的,它确实返回了给定猫的多个产品。 – Katherine 2009-10-03 12:16:48

相关问题