2014-02-13 33 views
2

我想限制每個brand_id的10個產品的結果。以下是我的查詢的樣子:限制SQL查詢中每個ID的行數

SELECT 
products.id, products.brand_id 
FROM products 
    JOIN (
    select id, brand_id 
    from products limit 10) 
    pinner ON products.id = pinner.id 
WHERE pinner.brand_id IN ('1', '2','3') ; 

這顯然不起作用。有什麼建議麼?

編輯: 這篇文章幫我解決:http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

+0

帶走的子查詢適應。按條款添加訂單。將限制條款放在最後。 –

回答

2

從另一個答案

set @brand_id= ''; 
    set @num = 0; 

    select 
    products.id, products.brand_id, 
    @num := if(@brand_id= brand_id, @num + 1, 1) as dummy_1, 
    @brand_id:= brand_id as dummy_2, 
    @num as row_number 
    from products 
    where brand_id IN ('1', '2','3') 
    group by 
    brand_id, 
    row_number 
    having row_number <= 10; 
2

嘗試這樣

SET @rownum =0; 

SELECT id,brand_id FROM 
(
    SELECT 
    products.id, products.brand_id, @rownum := @rownum + 1 AS rank 
    FROM products 
     JOIN (
     SELECT id, brand_id 
     from products limit 10) 
     pinner ON products.id = pinner.id 
    WHERE pinner.brand_id IN ('1', '2','3') 
) AS T 
Where rank < 10