比如我有一筆資料 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 獲取前後筆資料?? 但俱體方法應該要怎麼實現呢? 或是有其他的可行方式有請高手解答

解决方案 »

  1.   


    上一筆  SELECT *
      FROM myTable
      WHERE id=99-1
    下一筆
      SELECT *
      FROM myTable
      WHERE id=99+1
      

  2.   

    to rucypli很抱歉,但我還是忍不住想說,看到你的回帖我覺得你是來亂的??
      

  3.   

    难道createTime值有重复?否则不应该两种方式的结果会不同。
      

  4.   


    几个问题;
    1:ORDER BY createTime ASC, birthday DES, id DESC
    这样也行??2:你前面的排序的时候CREATETIME是升序排列,到后面CREATETIME是降序排列,而且CREATETIME是第一个排序字段,那得到的时间肯定是不一样的,那么LIMIT 1得到的肯定不一样。
      

  5.   

    排序结果不一样是因为 你的createtime有重复值 
    但是 和你的 ORDER BY createTime ASC, birthday DES, id DESC  排出来的位置应该一样的