【问题标题】:How can get records after specific id in mysql如何在mysql中获取特定id后的记录
【发布时间】:2012-07-11 11:04:11
【问题描述】:

我们在 mysql 上有这个:


**并希望以 2 个限制返回:**
1- "SELECT * FROM table ORDER BY point DESC LIMIT 0,2" //返回 'google' & 'jsfiddle'
2- "SELECT * FROM table ORDER BY point DESC LIMIT 2,2" //返回 'stackoverflow' & 'msn'
3-"INSERT INTO table SET id = 11, name = 'gmail', point = 101 "
4- "SELECT * FROM table ORDER BY point DESC LIMIT 4,2" //返回 'msn' & 'emra'
**在数字 4 'msn' 是重复的。我想要 4 号返回“emra”和“facebook”。**
我可以保存“id”,并且我想要在该 id 之后返回记录的查询。

[编辑] 让我换个方式问:

我们有这些记录:

id, name, point
4, 'google', 100
6, 'yahoo', 100
3, 'gmail', 100
8, 'ymail', 100
2, 'fb', 100

我有 id:3 并希望选择此 id 之后的记录(在此示例中为 'ymail'、'fb')



这是一个通过 scorlling 加载的 ajax 内容(如 facebook),但是关于每时每刻都在变化的用户的最大点数。

【问题讨论】:

  • 第 4 个 msn 是如何重复的?为什么脸书??为什么不bing,github?我不明白你的问题
  • 你应该阅读this
  • @FahimParkar 见poncha 答案;)

标签: mysql select sql-order-by


【解决方案1】:

如果我正确理解了您的问题(我对此表示怀疑),那么您需要一种在获得第一个 N 后获取与您的搜索条件匹配的 其他 热门结果的方法...

这样做的主要问题是 记录(您在 #3 中显示)可能会在之前的结果之间任何地方,从而使您已经获取的记录已过时(按顺序)。

所以,如果你真的想要这个,你应该做两件事:

  1. 记住所有您已经获取的ID,并在查询中在WHERE 子句中提供NOT IN(list of already fetched ids),而不指定偏移量(仅LIMIT 2

  2. 获取之后,将重新获取的结果数量添加到列表中,并在需要时重新排序(某种插入排序)

【讨论】:

  • 这个解决方案是正确的,但是可能我已经获取的ID太多了,需要来自客户端的大量上传流量。有更好的解决方案吗?
  • @EmRa228 您可以记住服务器上的 ID 列表(例如在服务器端会话存储中),并在下一次请求时再次更新列表。但是,请注意,这种方法与 RESTful 服务的基本原则相矛盾——这些请求不再是无状态的
  • 这种方法非常智能。我也可以存储在数据库中。我等着,也许有人给我SQL语句吧。
猜你喜欢
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多