SQL Count使用LIMIT时的总行数

13 sql count limit

我正在尝试创建一个简单的图库,每页显示16个图像.我正在使用LIMIT 16在页面上显示正确的数量,但如果有超过16行,我想在底部有链接,允许用户导航到下一页.

我知道我可以通过删除限制并简单地使用循环来显示前16个项目来实现所需的结果,但这将是低效的.显然,COUNTING行数总是= 16.

$sql .= "posts p, images im, postimages pi WHERE
    i.active = 1 
    AND pi.post_id = p.id
    AND pi.image_id = im.image_id 
    ORDER BY created_at LIMIT 16";
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议一种更有效的方法吗?

谢谢

Qua*_*noi 28

MySQL:

SELECT  SQL_CALC_FOUND_ROWS
        *
FROM    posts p, images im, postimages pi
WHERE   i.active = 1 
        AND pi.post_id = p.id
        AND pi.image_id = im.image_id 
ORDER BY
        created_at
LIMIT 16;

SELECT  FOUND_ROWS();
Run Code Online (Sandbox Code Playgroud)

第一个查询将返回16行,第二个查询将返回LIMIT第一个查询中没有子句将返回的行数.

您可以使用它来决定是否显示"下一个"链接.

  • @RonLugge:`FOUND_ROWS()`是会话范围,其他会话不影响它. (2认同)

And*_*nna 1

除了用于获取其他人提到的计数的单独查询之外,您还需要抵消您所在的给定页面的结果。

$sql .= "posts p, images im, postimages pi WHERE
    i.active = 1 
    AND pi.post_id = p.id
    AND pi.image_id = im.image_id 
    ORDER BY created_at 
    LIMIT ". ($page - 1) * $pagesize .", ". $pagesize;
Run Code Online (Sandbox Code Playgroud)

有关 SQL 注入的正常警告将适用于此。