我试图创建一个简单的图片库,每页显示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";
任何人都可以提出这样做的更有效的方法?
谢谢
您需要抵消你的结果对于给定的页面你是在除了用于获取其他人都提到计数的单独的查询。
$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注入的正常警告将适用于此。
在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
在第一查询子句。
你可以用它来决定是否显示“下一个”链接或没有。
你们是不是要完全分页,或者只是有this page
和next page
? 如果是后者,你可以简单地LIMIT 17
和计算结果的行。 如果你17,你需要分页。
使用两个查询,其中一个是你的查询,另一种是:
SELECT COUNT(primary_key) FROM ... WHERE...