php mysql连接2个表并从每个组获取有限的行

时间:2015-08-06 06:28:13

标签: php mysql

我有2个表,如类别,产品。我想在单个查询中从每个类别中获取2个产品。

类别表包含以下内容

intCatId    varName

1       cat1

2       cat2

3       cat3

======================

产品表

intPId    PName  intCatId    

1          pro1       1

2          pro2       1

3          pro3       1

4          pro4       3

5          pro6       3

6          pro7       2

我使用了以下查询

SELECT a.*, b.* FROM product a INNER JOIN category b ON a.intCatId=b.intCatId GROUP BY b.intCatId

How to apply limit here. 

我需要输出

intCatId     varName    intPid     PName

1            cat1         1         pro1

1            cat1         1         pro1

2            cat2         6         pro7

3            cat3         4         pro4

3            cat3         5         pro6

请帮帮我。感谢

1 个答案:

答案 0 :(得分:2)

不幸的是,Mysql不像其他RDBMS那样支持此类查询的窗口函数,但您可以使用用户定义的变量来使用排名查询

select intCatId, varName,intPId, PName,rank
from (
select *, @r:= case when @g = intCatId 
     then  @r + 1
     else 1 end rank,
     @g:= intCatId
    from(
    select c.intCatId,c.varName, p.intPId, p.PName
    from category c
    join product p on c.intCatId=p.intCatId
    order by c.intCatId
    ) a cross join(select @g:=null,@r:=0) t
) t1
where rank <= 2

DEMO