當涉及到讀取用戶收藏的內容時,通常需要從多個表中獲取數據。假設有三個表:
- 收藏表 (favorites):存儲用戶收藏id和時間戳的表。
- 商品表 (goods):存儲商品信息的表。
- 文章表 (articles):存儲文章信息的表。
問題:讀取按收藏時間排序的標題
目標是獲取按收藏時間降序排列的收藏標題。可以通過兩種方法實現:
立即學習“PHP免費學習筆記(深入)”;
第一種方法:循環查詢
$favorites = $db->query('select * from favorites order by dateline desc'); foreach ($favorites as $fav) { if ($fav['type'] == 1) { $title = $db->query("select title from goods where id = {$fav['cid']}")->fetchcolumn(); } else { $title = $db->query("select title from articles where id = {$fav['cid']}")->fetchcolumn(); } echo $title; }
第二種方法:聯表查詢
SELECT IF(goods.id IS NULL, articles.title, goods.title) AS 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
第二種方法通過聯表查詢同時獲取商品和文章標題。然而,它需要對結果進行排序,將所有標題合并到一個有序列表中。如果收藏量較大,這可能是一個性能瓶頸。
討論
兩種方法都有其優缺點。第一種方法涉及更多的數據庫查詢,但排序簡單。第二種方法需要更復雜的排序邏輯,但可以減少數據庫查詢數量。選擇最佳方法取決于特定用例。
另外,如果收藏類型不止兩種,則需要修改查詢或使用 case when 語句。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END