之前的一個案子,使用
SELECT TOP 5 * FROM MyTable ORDER BY RND(news_id)

雖然會亂數取出前5筆,不過最近客戶說他們以前的舊資料好像也會撈出來,並不是最新的前5筆紀錄,仔細看一下SQL語法,發現使用RND後,排序變成沒有依據,所以才會連舊的資料也撈出來

因此改為如下的子查詢的方式後,就可解決此一問題了:

SELECT news_id, news_name from MyTable WHERE news_id IN(SELECT TOP 5 news_id FROM MyTable ORDER BY news_update DESC) ORDER BY RND(news_id)

說明:我們分兩段式來查詢,在子查詢內先用ORDER BY news_update DESC 依更新日期將最新的前5筆 news_id 查出來(注意這裡子查詢只能撈索引的id而已,如用*或加入其他欄位都會報錯),然後再用WHERE news_id IN 的指令來限制只在這5筆內random排序。

SQL語法變化真的蠻多的,只要善加利用,在後端就已經可以解決大部分資料處理的問題,再到前端時就不用喘呼呼的用一堆判斷式去判斷資料的準確性了。

Leave a Comment

你的電子郵件位址並不會被公開。 必要欄位標記為 *