SQL计数行的总数量,同时使用LIMIT(SQL Count total number of row

2019-06-25 21:42发布

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

我知道我可以通过删除限制,只需使用一个循环来显示前16个项目达到预期的效果,但是这将是低效的。 很明显,计数的行数将始终为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";

任何人都可以提出这样做​​的更有效的方法?

谢谢

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

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



Answer 2:

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

第一个查询将返回16行,而第二个查询将返回这将是不存在返回的行数LIMIT在第一查询子句。

你可以用它来决定是否显示“下一个”链接或没有。



Answer 3:

运行没有限制, 返回计数一个单独的查询。



Answer 4:

你们是不是要完全分页,或者只是有this pagenext page ? 如果是后者,你可以简单地LIMIT 17和计算结果的行。 如果你17,你需要分页。



Answer 5:

使用两个查询,其中一个是你的查询,另一种是:

SELECT COUNT(primary_key) FROM ... WHERE...


文章来源: SQL Count total number of rows whilst using LIMIT
标签: sql count limit