我有一个从mySQL输出的列表,其中有20个项目。
用户将添加和删除进入列表的项目,因此项目的ID不是连续的。它们可能是5,10,12,13,14,27,28,31,38,40。该列表限于20个项目。
SELECT * FROM table WHERE fields = vars ORDER BY id DESC LIMIT 0,10
当此列表显示在屏幕上时,用户将继续添加和删除项目。我在这里的示例中有最后一个id的值,这是40。
可能会删除其中一些项目,并会添加新项目。
如何从上一个已知的id开始运行此查询。我是否添加了WHERE ID> 40.我可以在LIMIT 0,10子句之后放置WHERE子句。
SELECT * FROM table WHERE fields = vars ORDER BY id DESC LIMIT 0,10 WHERE id > $lastid
这里的要点是我不想显示已经显示的项目,我不知道项目是否已被删除所以做1,10可能会带来不正确的结果。我在最后一个显示的项目后立即需要接下来的10个结果。
答案 0 :(得分:0)
保存上次检索的id
值,并在现有WHERE子句中添加条件。 (你不能在LIMIT之后添加第二个WHERE子句,这是无效的.SELECT语句获得一个WHERE子句。)
我有点困惑,因为问题中的查询显示按DESCENDING顺序按id排序。在这种情况下,您希望下一个小于的id值是上次检索的值。
如果您按升序排序,那么......
SELECT t.*
FROM table t
WHERE t.fields = vars
AND t.id > ?
ORDER BY t.id ASC
LIMIT 10
问号是绑定占位符...假设您正在使用预准备语句。如果您没有使用预准备语句,那么请使用文字代替绑定占位符...您上次检索的值。
如果您按ID按降序排序,那么您可能希望检索ID值小于之前检索到的最后一行的行。
保留检索到的最后一行的id值并将其放入网页上的隐藏输入并在发布表单时将其读回来并不困难。 (忽略Jorge Campos的错误建议。)