mysql-如何獲取已知數據的前後筆資料呢?

jasper1983 2010-06-26 06:51:14
比如我有一筆資料 id 是 99,而且是用欄位 createTime 排序,
我本來的做法是下面這樣

上一筆

SELECT *
FROM myTable
WHERE createTime < (SELECT createTime FROM myTable WHERE id = 99)
ORDER BY createTime DESC
LIMIT 1

下一筆
SELECT *
FROM myTable
WHERE createTime > (SELECT createTime FROM myTable WHERE id = 99)
ORDER BY createTime ASC
LIMIT 1


以上如果排序只有單純一種的話那都沒什麼問題,但我想要設定進階一點的排序時,
上面的方法就不適用了,例如變成下面這樣排序

SELECT *
FROM myTable
WHERE createTime > (SELECT createTime FROM myTable WHERE id = 99)
ORDER BY createTime ASC, birthday DES, id DESC
LIMIT 1

變成我抓出來上下筆的結果和 ORDER BY createTime ASC, birthday DES, id DESC 排出來的是不一樣了
請問各位大俠有解決方法嗎? 我已經想了一整天都研究不出來方法,
我有個想法是,不知道有沒有辦法算 id 為 99 的這筆資料在 ORDER BY createTime ASC, birthday DES, id DESC 裡面排序的位置是多少?
如果得知之後再用 LIMIT 1 1 和 LIMIT -1 1 獲取前後筆資料?? 但俱體方法應該要怎麼實現呢? 或是有其他的可行方式

有請高手解答
...全文
251 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wminjay 2010-06-28
  • 打赏
  • 举报
回复
排序结果不一样是因为 你的createtime有重复值 
但是 和你的 ORDER BY createTime ASC, birthday DES, id DESC  排出来的位置应该一样的
zuoxingyu 2010-06-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 jasper1983 的回复:]
比如我有一筆資料 id 是 99,而且是用欄位 createTime 排序,
我本來的做法是下面這樣

上一筆

SELECT *
FROM myTable
WHERE createTime < (SELECT createTime FROM myTable WHERE id = 99)
……
[/Quote]

几个问题;
1:ORDER BY createTime ASC, birthday DES, id DESC
这样也行??

2:你前面的排序的时候CREATETIME是升序排列,到后面CREATETIME是降序排列,而且CREATETIME是第一个排序字段,那得到的时间肯定是不一样的,那么LIMIT 1得到的肯定不一样。

iihero_ 2010-06-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 jasper1983 的回复:]
比如我有一筆資料 id 是 99,而且是用欄位 createTime 排序,
我本來的做法是下面這樣

上一筆

SELECT *
FROM myTable
WHERE createTime < (SELECT createTime FROM myTable WHERE id = 99)
……
[/Quote]
难道createTime值有重复?否则不应该两种方式的结果会不同。
jasper1983 2010-06-26
  • 打赏
  • 举报
回复
to rucypli

很抱歉,但我還是忍不住想說,看到你的回帖我覺得你是來亂的??
rucypli 2010-06-26
  • 打赏
  • 举报
回复

上一筆

SELECT *
FROM myTable
WHERE id=99-1


下一筆
SELECT *
FROM myTable
WHERE id=99+1
zhuyanqiulove521 2010-06-26
  • 打赏
  • 举报
回复
csc

56,675

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧