簡體   English   中英

如何優化mysql查詢獲取類別和子類別

[英]How to optimize mysql query getting categories and subcategories

我創建了一個腳本,用於構建包含類別,子類別和子子類別的菜單。 為了獲得這些項目,我使用3個單獨的MySQL查詢。 如下:

要檢索主要類別:

SELECT id, name FROM categories WHERE parent_id=0

要檢索我使用的每個類別的子類別:

SELECT id, name FROM categories WHERE parent_id=?

在哪里? 是父類別的ID。 然后,我再次為每個子類別運行查詢。

如何優化此腳本以使用較少的SQL查詢? 先感謝您。

試試這個查詢 -

類別+子類別:

SELECT c1.id, c1.name, c2.id, c2.name FROM categories c1
  LEFT JOIN categories c2
    ON c2.parent_id = c1.id
WHERE c1.parent_id = 0

類別+子類別+子子類別:

SELECT c1.id, c1.name, c2.id, c2.name, c3.id, c3.name FROM categories c1
  LEFT JOIN categories c2
    ON c2.parent_id = c1.id
  LEFT JOIN categories c3
    ON c3.parent_id = c2.id
WHERE c1.parent_id = 0

某些數據庫服務器具有幫助這些操作的構造。 但是,MySQL不是其中之一。

還有其他方法可以在數據庫中存儲更高效的層次結構。 有關完整的故事,請查看此文章。 它將向您介紹嵌套集。

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

如果您只想要類別的父類別(結果行計數應該等於類別/子類別行的數量),則另一種方法:

SELECT c1.id, c1.name, c2.id, c2.name 
    FROM category c1
       LEFT JOIN category c2 ON c1.parent_id = c2.id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM