查詢文章的上下篇Sql語句
阿新 • • 發佈:2019-01-31
本來覺得這個查詢不用大動干戈的洋洋灑灑寫一篇文章的;不過看到不少人在這栽跟頭;還是簡單總結下吧;
文章內容頁一般都會有上一篇和下一篇的功能;
那麼查詢上下篇的sql語句應該怎麼寫呢;
示例資料表:bjy_article
自增主鍵:id
當前文章id:10
肯定會有童鞋是說,這簡單啊id+1和id-1不就OK了;sql無非如下:
SELECT * FROM bjy_article WHERE id=10-1; #上一篇
SELECT * FROM bjy_article WHERE id=10+1; #下一篇
寫出這2句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; #上一篇