【发布时间】:2019-06-10 18:33:26
【问题描述】:
是否可以在查询中将两个数字相乘以对 MYSQL 查询进行分页?
SELECT * FROM Posts
LIMIT $itemsPerPage
OFFSET ($pageNumber * $itemsPerPage)
当我尝试在 SQL 中动态地将这两个数字相乘时,我在乘法部分收到一个关于我的语法的错误。查询中的数字不能相乘吗?
我的完整查询
SELECT com_id, time_stamp, comBy, post_id, comContent, IFNULL(likes, 0) - IFNULL(dislikes, 0) AS likeResult, profile_pic FROM Comments C
# Adding Likes
LEFT JOIN (SELECT likedCom_id, COUNT(*) AS likes FROM Comment_Likes
GROUP BY likedCom_id) Cl ON C.com_id=Cl.likedCom_id
LEFT JOIN (SELECT dislikedCom_id, IFNULL(COUNT(*),0) AS dislikes FROM Comment_Dislikes
GROUP BY dislikedCom_id) Cd ON C.com_id=Cd.dislikedCom_id
LEFT JOIN (SELECT user_id, profile_pic FROM Users) U
ON U.user_id = C.comBy
WHERE post_id = '10'
ORDER BY time_stamp DESC
LIMIT 5
OFFSET (0 * 5)
例如上面的OFFSET (0 * 1)代码分别代表pageNumber和itemsPerPage变量。
我在 HeidiSQL 上遇到关于我的查询的错误:
【问题讨论】:
-
显示您的完整代码 .. 以及您确切的错误信息
-
@scaisEdge 我已经编辑了我的代码。谢谢!
-
请注意,如果时间戳不是唯一的,您的查询可能无法按预期工作。具有不同偏移值的查询可能会给出不同的查询计划。如果时间戳不是唯一的,则排序将不是完全确定的。为了使其具有确定性,我想您可以更改为“ORDER BY time_stamp DESC, com_id”
-
@oysteing 哇,好收获。谢谢!我还注意到,如果有帖子插入,当用户在应用程序中向下滚动时,分页查询就会出错。所以,我还记录了用户开始向下滚动的时间,并用它来过滤掉之前的插入。我使用“time_stamp
-
有更有效的分页方法... google "使用 mysql 进行有效分页" ...即保留当前页面最后一行的值,然后在查询中使用这些值下一页