Laravel 取得上一筆/下一筆的 Query 該怎麼寫

有時候在寫一些前台的 News 的資料時,設計師畫了兩個 Button,一個是上一篇,一個是下一篇,這兩個 Button 確實是很正常的功能,可是我們後端在撈資料時,並不能順著 id (也就是流水編號) 來撈。

比方說使用者看的 id 是 20 的新聞,他的上一篇不是 id: 19,下一篇也不是 id: 21,因為上一篇可能已經刪掉了,或是下一篇其實是不發佈的狀態,因此上一篇可能是 18 也說不定,下一篇也可能是 22 也說不定,所以不應該是用流水編號來撈。

我的撈法是要以當下所看的文章 id 為基準點,上一篇的話就是小於現在的 id 下去找,然後濾出最大的 id,這樣就得到上一篇,而下一篇的話,就是大於現在的 id 往上找,然後濾出最小的那個 id。

範例:

*取得上一篇 ID
$prev_essay = $this->essay->where('id', '<', $id)->max('id');
*取得下一篇 ID
$next_essay = $this->essay->where('id', '>', $id)->min('id');

一般 SQL 的表示方法為:

select min(`id`) as next_id from `TABLE_NAME` where `id` > $id

select max(`id`) as prev_id from `TABLE_NAME ` where `id` < $id


以上是我的方法,至少爬過文之後覺得這個方法可行,如果有更有效率的做法,也歡迎分享一下,謝謝!

留言

這個網誌中的熱門文章

[Android] 筆記 手機上測試自己的 APP

解決fatal: Not a git repository (or any of the parent directories): .git錯誤

[Android 筆記] 設定 ImageView 的圖檔來源