Php 小于运算符给出奇怪的结果

Php 小于运算符给出奇怪的结果,php,mysql,sql,Php,Mysql,Sql,所以我用这个查询将两个表连接在一起并返回数据 SELECT * FROM userposts up INNER JOIN userpostmeta upm ON up.up_postID = upm.upm_postID INNER JOIN userbasicprofile ubp ON up.up_userID = ubp.ubp_userID WHERE up.up_userID = :self OR up.up_userID IN (SELECT ufs_userID2 FROM use

所以我用这个查询将两个表连接在一起并返回数据

SELECT * FROM userposts up
INNER JOIN userpostmeta upm
ON up.up_postID = upm.upm_postID
INNER JOIN userbasicprofile ubp
ON up.up_userID = ubp.ubp_userID
WHERE up.up_userID = :self OR up.up_userID IN (SELECT ufs_userID2 FROM userfriends where ufs_userID1 = :u)
AND
up.up_indexid < $startIndex AND up.up_indexid > 0
ORDER BY up.up_indexid DESC
LIMIT $limit
表userposts有一个名为'up_indexid'的列,它是自动递增的

问题是,当我为support 31发送$startIndex值时,它会显示indexid 31下方的帖子,但也会显示indexid 31上方的帖子


为什么会这样?我尝试了多个断点,但似乎没有解决问题。

原因与尝试执行以下操作无关:

'SELECT * FROM userposts up
INNER JOIN userpostmeta upm
ON up.up_postID = upm.upm_postID
INNER JOIN userbasicprofile ubp
ON up.up_userID = ubp.ubp_userID
WHERE up.up_userID = :self OR up.up_userID IN (SELECT ufs_userID2 FROM userfriends where ufs_userID1 = :u)
AND
up.up_indexid < ' . intval($startIndex) . ' AND up.up_indexid > 0
ORDER BY up.up_indexid DESC
LIMIT ' . intval($limit)
我注意到您正在使用绑定和字符串内变量,为什么不也绑定startIndex和limit呢? 此外,您可能希望了解抵消,在您的情况下,可能是一个更好的解决方案,例如限制100,10所以100个条目从第10个条目开始,根据或具有比WHERE子句更低的优先级,因此您的WHERE子句被解释为:

WHERE up.up_userID = :self OR (up.up_userID IN (SELECT ufs_userID2 FROM userfriends where ufs_userID1 = :u)
AND
up.up_indexid < $startIndex AND up.up_indexid > 0)
ORDER BY up.up_indexid DESC
LIMIT $limit
WHERE (up.up_userID = :self OR up.up_userID IN (SELECT ufs_userID2 FROM userfriends where ufs_userID1 = :u))
AND
up.up_indexid < $startIndex AND up.up_indexid > 0
ORDER BY up.up_indexid DESC
LIMIT $limit
我想你想要的是:

WHERE (up.up_userID = :self OR up.up_userID IN (SELECT ufs_userID2 FROM userfriends where ufs_userID1 = :u))
AND
up.up_indexid < $startIndex AND up.up_indexid > 0
ORDER BY up.up_indexid DESC
LIMIT $limit