PHP+MySQL 中,如何高效地讀取用戶收藏內容并按收藏時間排序?

PHP+MySQL 中,如何高效地讀取用戶收藏內容并按收藏時間排序?

php+mysql 中,如何高效地讀取用戶收藏的內容?

當涉及到讀取用戶收藏的內容時,通常需要從多個表中獲取數據。假設有三個表:

  • 收藏表 (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
喜歡就支持一下吧
點贊15 分享