利用聯表查詢優化用戶收藏內容讀取
在用戶收藏功能中,包含三個數據表:favorites(收藏數據)、goods(商品)和 articles(文章)。為了讀取收藏的內容標題,您需要在兩個數據表(goods 和 articles)中查找相應的條目,并根據收藏日期按降序排列結果。
第二種方法 – 使用 in 查詢
使用第二種方法(將 cid 放入數組并使用 in 查詢讀取數據),雖然效率較高,但在需要對按照 dateline 排序的結果進行組合時會遇到困難。
聯表查詢解決方案
為了解決這個問題,建議使用聯表查詢。聯表查詢可以將多個數據表連接起來并合并其數據。在這種情況下,您可以將 favorites 表與 goods 和 articles 表分別使用 left join 連接。
sql 查詢
SELECT if(goods.id IS NULL, articles.title, goods.title), favorites.* FROM favorites LEFT JOIN goods ON goods.id = favorites.cid AND favorites.type = 1 LEFT JOIN articles ON articles.id = favorites.cid AND favorites.type = 2 ORDER BY dateline DESC
登錄后復制
if 語句
if 語句用于根據 type 字段的值來選擇顯示 goods.title 還是 articles.title。當 type 等于 1 時,顯示商品標題;當 type 等于 2 時,顯示文章標題。
優點
這種聯表查詢方法的優點在于:
- 僅執行一次數據庫查詢。
- 正確處理了多對一關系,并基于 dateline 列對結果進行排序。