Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否可以使用带乘法的偏移量对查询进行分页?_Mysql_Sql_Node.js - Fatal编程技术网

Mysql 是否可以使用带乘法的偏移量对查询进行分页?

Mysql 是否可以使用带乘法的偏移量对查询进行分页?,mysql,sql,node.js,Mysql,Sql,Node.js,可以在查询中乘以两个数字来分页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)

可以在查询中乘以两个数字来分页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)
例如,上面的
偏移量(0*1)
代码分别表示pageNumber和itemsPerPage变量

关于我的查询,我在HeidiSQL上遇到错误:


您需要限制,不能使用计算来通过限制或偏移量(您可以使用动态SQL)

在select语法中,偏移量是LIMIT子句中的一个子类(请参见 ):

[限制{[offset,]row_count | row_count offset offset}]

my_value  = pageNumber * itemsPerPage; 

'SELECT * FROM Posts
LIMIT 100 OFFSET ' + my_value 
你应该使用“按顺序”

'SELECT * 
FROM Posts
ORDER BY your_col
LIMIT 100 OFFSET ' + my_value 

OFFSET
参数是标量值,请提供数值文本或单个绑定值

如果我们需要进行乘法运算,我们可以在客户机中进行乘法运算,并将结果作为单个参数提供给
OFFSET

代码似乎正在动态生成SQL语句。我们可以这样做:

$sql =  "SELECT ... OFFSET " . (int)($pageNumber * $itemsPerPage) ;


显示完整的代码。。你知道确切的错误吗message@scaisEdge我已经编辑了我的代码。谢谢请注意,如果时间戳不唯一,则查询可能无法按预期工作。具有不同偏移值的查询可能会给出不同的查询计划。如果时间戳不是唯一的,则排序将不是完全确定的。为了使它具有确定性,我想你可以改为“按时间顺序,按戳记描述,com\u id”@oysteing哇,接得好。非常感谢。我还注意到,当用户在应用程序中向下滚动时,如果有post插入,分页查询就会出错。因此,我还记录了用户开始向下滚动的时间,并使用它来过滤之前的插入。我使用“时间戳”进行分页有更有效的方法…谷歌使用mysql进行高效分页" ... i、 e.保留当前页面上最后一行的值,然后在下一页的查询中使用这些值是的,我的问题是乘法部分会抛出错误。即使我试着将简单的数字相乘。我已经编辑了我的帖子以包含我的完整查询。答案已更新。。不允许使用计算值。。您应该在查询外部执行计算,并在内部使用值。。最终使用dinamic sql..我认为它更可读,更容易理解它们是变量。在Nodejs中,它们实际上以connection.escape(decoded.variable)的形式存在。是的,这就是我现在要做的。非常感谢。无论如何,不允许对这些参数使用计算。。正如我在回答中所建议的,您需要对计算值(或参数)进行dinamic查询
$offset = $pageNumber * $itemsPerPage ;
$sql =  "SELECT ... OFFSET " . (int)$offset ;