在做文章頁面時,有時候需要在文章下面顯示出上一條和下一條記錄。如果簡單地使用id值加1和減1的方法來做會有缺陷。 各位看官請試想,如果我們刪除了中間的某一條和某幾條記錄呢?那不是取不出來了?
所以,思想是很重要的,嗯。舉個例子吧,比如說我有乙個名叫***的表,裡面有唯一的id欄位。然後,裡面有n條資料呢~~~
現 在,我們來看看我們的思維。我們是要根據已知id來找上一條和下一條的,也就是在資料庫裡相鄰的三條記錄, 中間那一條是確定的。那既然id有可能不連續, 那我們就用》和《運算子來吧(要是limit支援負值就沒這麼麻煩了……)。
嗯,取到本條記錄好說(為了方便說明,我們假設已知記錄的id為 123吧)。
sql語句如下 取到本條記錄的
select * from `t_kol_article` where `id` =18
那,取得它的下一條呢?我們可以用`id`>123作為條件。可是在資料庫裡`id`大於123的資料可能不止一條, 那就用limit吧。 取到已知記錄的下一條記錄:
select * from `t_kol_article` where `id` =18 limit 1
當然,你要寫limit 0,1我也沒有意見~ 那要取到上一條呢?用`id`<123 limit 1嗎?不可能的~取到的一定是第一條。
那要取到最後一條呢? (台下有個小聲音說:用排序~~~)對!
select * from `t_kol_article` where `id`<18 order by `id` desc limit 1
看看是不是最後一條了呢?好,那我們把sql語句合併一下,嗯,本條和下條好的好合併,**如下
select * from `t_kol_article` where `id`<18 limit 2
那要加上上一條記錄呢?不要忘了我們的mysql裡還有乙個union函式哦~~不知道的童鞋們可以去看看手冊。
為了防止記錄順序錯亂,我們把每條sql裡都加上排序吧。總結後的**就出來了:
(select * from `t_kol_article` where `id`<18 order by `id` desc limit 1)
union
(select * from `t_kol_article` where `id`>=18 order by `id` asc limit 2)
再順便說點吧,排序欄位也不一定要是`id`,可以是你資料庫表裡有的任何字段,但最好是不要有重複的喲。 需要注意的是,兩個select語句裡的order by都要用相同的字段,並且乙個是公升序乙個是降序, 不要弄成一樣的哦~趕快實驗吧!!!
上下篇部落格,按月歸檔
def blog detail request,blog pk context blog get object or 404 blog,pk blog pk context previous blog blog.objects.filter created time gt blog.created ...
查詢文章的上下篇Sql語句
本來覺得這個查詢不用大動干戈的洋洋灑灑寫一篇文章的 不過看到不少人在這栽跟頭 還是簡單總結下吧 那麼查詢上下篇的sql語句應該怎麼寫呢 示例資料表 bjy article 自增主鍵 id 肯定會有童鞋是說,這簡單啊id 1和id 1不就ok了 sql無非如下 寫出這2句sql後 大部分人稍加思索就會...
MySQL初學者使用指南 下篇
在上篇我們講了登入 增加使用者 密碼更改等問題。下篇我們來看看mysql中有關資料庫方面的操作。注意 你必須首先登入到mysql中,以下操作都是在mysql的提示符下進行的,而且每個命令以分號結束。一 操作技巧 1 如果你打命令時,回車後發現忘記加分號,你無須重打一遍命令,只要打個分號回車就可以了。...