我正在尝试创建一个简单的图库,每页显示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";
有人能建议一种更有效的方法吗?
由于
答案 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 page
和next 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...