php - 如何仅对 MySQL 查询中的连接表应用限制?

标签 php mysql sql

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

SELECT * FROM categories ca 
LEFT JOIN content co ON co.cat_id=ca.id

我想对其应用限制,即查询为每个类别获取 10 个内容。

我该如何查询?

最佳答案

没有rank MySQL 上的函数。

你应该使用变量。我写了this snipped为你。将其转换为您自己的模式:

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');

查询:

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.

结果:

| 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 |  

关于php - 如何仅对 MySQL 查询中的连接表应用限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30299290/

相关文章:

PHP 与 MySQL 查询的问题。该函数仅针对第一个 mysql 结果运行

mysql - 当 LEFT JOINing 两个不同的表时,GROUP CONCAT concats 太多重复值

php - 如何添加两个数据库列显示结果

SQL No Dup (Distinct) 在行上,但忽略一列

PHP Mysql - 导出整个数据库

PHP MySQL selectpicker 中的无限类别树

php - 处理内存限制

php解析错误 explode

MySQL 更新一个不同的数字

mysql - 在 mySQL 中遇到 WHERE DATEDIFF 问题