1. 程式人生 > >查詢文章的上下篇Sql語句

查詢文章的上下篇Sql語句

本來覺得這個查詢不用大動干戈的洋洋灑灑寫一篇文章的;不過看到不少人在這栽跟頭;還是簡單總結下吧;

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

白俊遙部落格

那麼查詢上下篇的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;     #上一篇