有時候在寫一些前台的 News 的資料時,設計師畫了兩個 Button,一個是上一篇,一個是下一篇,這兩個 Button 確實是很正常的功能,可是我們後端在撈資料時,並不能順著 id (也就是流水編號) 來撈。
比方說使用者看的 id 是 20 的新聞,他的上一篇不是 id: 19,下一篇也不是 id: 21,因為上一篇可能已經刪掉了,或是下一篇其實是不發佈的狀態,因此上一篇可能是 18 也說不定,下一篇也可能是 22 也說不定,所以不應該是用流水編號來撈。
我的撈法是要以當下所看的文章 id 為基準點,上一篇的話就是小於現在的 id 下去找,然後濾出最大的 id,這樣就得到上一篇,而下一篇的話,就是大於現在的 id 往上找,然後濾出最小的那個 id。
範例:
*取得上一篇 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
以上是我的方法,至少爬過文之後覺得這個方法可行,如果有更有效率的做法,也歡迎分享一下,謝謝!
沒有留言:
張貼留言
若你看的文章,時間太久遠的問題就別問了,因為我應該也忘了... XD