2009-10-03 103 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

相關問題