如何在MySQL查询中仅为连接表应用限制?

mmj*_*mjj 6 php mysql sql

我有两个表名为类别和内容(每个类别可以有很多内容),这是我的查询

SELECT * FROM categories ca 
LEFT JOIN content co ON co.cat_id=ca.id
Run Code Online (Sandbox Code Playgroud)

我想对它进行限制,查询为每个类别获取10个内容.

我应该如何查询?

dan*_*era 3

rankMySQL 上没有这个功能。

你应该使用变量。我为你写了这个片段。将其转换为您自己的架构:

MySQL 5.6 架构设置:

--c are categories
create table c ( id int, n varchar(100) );

--p are contents
create table p ( id int, fk_c int, n varchar(100) );

insert into c values
(1, 'A'),
(2, 'B');

insert into p values
(1,1,'a'),
(2,1,'b'),
(3,1,'d'),                          <-- id=3, over the limit set to 2
(4,2,'e');
Run Code Online (Sandbox Code Playgroud)

询问:

select * from (
  SELECT p.*, 
         @n := ( case when @c <> c.id then 1 else @n+1 end) as "num",
         @c := c.id as "prev c"
    FROM c left outer join p on c.id = p.fk_c, 
    (SELECT @n := 0, @c = 0)  r
) p  
    where p.num <= 2                <-- limiting to 2.
Run Code Online (Sandbox Code Playgroud)

结果:

| id | fk_c | n | num | prev c |
|----|------|---|-----|--------|
|  1 |    1 | a |   1 |      1 |
|  2 |    1 | b |   2 |      1 |
                                     <-- id=3 missing ;)
|  4 |    2 | e |   1 |      2 |  
Run Code Online (Sandbox Code Playgroud)