2014-02-13 30 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