[英]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.