2014-01-22 80 views
0

我有3個表:製造商,產品和客戶 我有一個查詢,讓我所有的製造商與他們的產品和他們的客戶。我用兩個LEFT JOINS做了這個。如何限制一個唯一的ID發生次數

對於10家制造商來說,結果超過500行,因爲對於產品和客戶表中的每個條目,它們都是製造商ID的結果中的一行。

我想創建一個查詢:給我製造商他們的產品和他們的客戶,但不是所有的製造商,只有10或20或有限的數量。

我該怎麼做? 我在想這個..

SELECT * 
FROM manufacturer as m 
LEFT JOIN product as p ON (m.mn_id = p.man_mn_id) 
LEFT JOIN client as c ON (m.mn_id = c.man_mn_id) 
WHERE m.mn_id IN (SELECT mn_id 
        FROM manufacturer 
        WHERE mn_id >= (SELECT FLOOR(MAX(mn_id) * RAND()) 
            FROM manufacturer 
           ) 
        ORDER BY mn_id 
        LIMIT 10 
       ) 

或者是他們更好的方法?

回答

1

您可以通過限制試試這個製造商,它將獲得10製造商,並會加入這些製造商將他們的產品和客戶

SELECT 
    * 
FROM 
    (SELECT 
    * 
    FROM 
    manufacturer 
    ORDER BY id DESC 
    LIMIT 10) AS m /* you can change limit to 20 or something you want */ 
    LEFT JOIN product AS p 
    ON (m.mn_id = p.man_mn_id) 
    LEFT JOIN CLIENT AS c 
    ON (m.mn_id = c.man_mn_id) 
+0

坦克!這是我尋找的解決方案! – user3156386

+1

@ user3156386如果它的工作,然後在這裏閱讀[**接受的答案:它是如何工作**](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235 #5235) –

1

我認爲你可以簡化您的查詢,這樣的事情,保持「隨機「功能你在查詢中有:

SELECT * 
FROM (SELECT * FROM manufacturer ORDER BY RAND() LIMIT 10) as m 
LEFT JOIN product as p ON (m.mn_id = p.man_mn_id) 
LEFT JOIN client as c ON (m.mn_id = c.man_mn_id) 
ORDER BY mn_id