我正在尝试创建一个简单的图库,每页显示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第一个查询中没有子句将返回的行数.
您可以使用它来决定是否显示"下一个"链接.
除了用于获取其他人提到的计数的单独查询之外,您还需要抵消您所在的给定页面的结果。
$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 注入的正常警告将适用于此。