原本以爲這個查詢不用大動干戈的洋洋灑灑寫一篇文章的;不過看到很多人在這栽跟頭;仍是簡單總結下吧;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; #上一篇