SQL Count使用LIMIT时的总行数

时间:2009-07-14 14:58:08

标签: 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";

有人能建议一种更有效的方法吗?

由于

5 个答案:

答案 0 :(得分: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();

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

您可以使用它来决定是否显示“下一个”链接。

答案 1 :(得分:3)

您是要尝试完全分页,还是只有this pagenext page?如果是后者,您只需LIMIT 17并计算结果的行数。如果你得到17,你需要分页。

答案 2 :(得分:3)

运行单独的查询,但不限制返回计数。

答案 3 :(得分: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注入的正常警告将适用于此处。

答案 4 :(得分:0)

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

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