在做博客文章詳情的時候,有一個拓展閱讀的功能:
想法一:根據當前文章Id,寫死兩條鏈接,Id+1,Id-1,但是文章Id可能被刪除,Id不連續,不可取。×
想法二:獲得當前文章記錄的前一條和後一條記錄,好像有點難受,要查詢兩次。查詢兩次,可行。√
想法三:直接獲取文章表兩條隨機的記錄。一次查詢,舒服。√
SELECT *
FROM t_article
WHERE Id >= ((SELECT MAX(Id) FROM t_article)-(SELECT MIN(Id) FROM t_article)) * RAND() + (SELECT MIN(Id) FROM t_article)
LIMIT 2
ArticleService對應的方法
/// <summary>
/// 延伸閱讀-獲取兩條隨機文章
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
public IEnumerable<ArticleModel> GetRandomArticleList(int num)
{
string _where = "WHERE Id >= ((SELECT MAX(Id) FROM t_article)-(SELECT MIN(Id) FROM t_article)) * RAND() + (SELECT MIN(Id) FROM t_article) LIMIT "+num;
return repository.GetByWhere(_where,null,null,null); ;
}