查詢文章的上下篇Sql語句



原本以爲這個查詢不用大動干戈的洋洋灑灑寫一篇文章的;不過看到很多人在這栽跟頭;仍是簡單總結下吧;sql

文章內容頁通常都會有上一篇和下一篇的功能;code

白俊遙博客

那麼查詢上下篇的sql語句應該怎麼寫呢;資源

示例數據表:bjy_article博客

  自增主鍵:idit

當前文章id:10
for循環

確定會有童鞋是說,這簡單啊id+1和id-1不就OK了;sql無非以下:class

SELECT * FROM bjy_article WHERE id=10-1;     #上一篇
SELECT * FROM bjy_article WHERE id=10+1;     #下一篇

寫出這2句sql後;大部分人稍加思索就會發現不妥;若是中間刪除了幾篇,那取到的值就成空了?sql語句

這時有人在一旁大喊;能夠用for循環啊,再來個if直到不爲空爲止;循環

不經腦子的隨便一想;貌似行得通;可是做爲嚴謹的程序猿,認真思考這個不算方法的方法時候立馬發現2個嚴重的問題;程序

1:我只是想取上一篇文章;結果來了個for查詢了NNNN次,嚴重浪費資源;

2:假設如今一共10篇文章,第11篇就爲空了,若是用for就會無限循環下去一直爲空;

如此來講;果斷是不能這樣寫了;

這時又有人在一旁大喊;用limit不就能夠了;

正解;

SELECT * FROM bjy_article WHERE id<10-1 LIMIT 1;     #上一篇
SELECT * FROM bjy_article WHERE id>10+1 LIMIT 1;     #下一篇

這就完了嗎?NO;若是用這sql取;下一篇沒問題了;可是上一篇會一直是第一篇文章!

這時來個倒序便可;

SELECT * FROM bjy_article WHERE id<10-1 LIMIT 1 ORDER BY id DESC;     #上一篇
相關文章
相關標籤/搜索