資料庫設計分類、目錄等等的結構,要去考量有幾個階層,當階層不明確,或者階層很多,通常會用下述設計方式(想要幾個階層都可以):
- cate_id / cate_name / cate_parent_id (預設 cate_parent_id = 0)
依照這種設計法,每次查詢就一直找到自己的父節點id,當找到 cate_parent_id = 0 就找到最上層了
這種作法就會需要寫個 while 一直往上查詢上去,有沒有辦法一行 SQL 語法直接達成呢?
MySQL 多層的目錄階層 一次查詢完成
此篇文章 How to create a MySQL hierarchical recursive query 有更多 Category 的設計方式與作法(分類使用 LIKE / Recursive / Self-Join 的方式,此篇採用的是 Self-Join 的方式)
Table Name 是 category 下述 SQL 語法應該一看就懂
- SELECT * FROM category AS t1
LEFT JOIN category AS t2 ON t2.cate_parent_id = t1.cate_id
LEFT JOIN category AS t3 ON t3.cate_parent_id = t2.cate_id; - SELECT t1.cate_name, t2.cate_name, t3.cate_name FROM category AS t1
LEFT JOIN category AS t2 ON t2.cate_parent_id = t1.cate_id
LEFT JOIN category AS t3 ON t3.cate_parent_id = t2.cate_id
若文章與分類中間有一個 Table 做 Mapping,要一次撈出文章順便把分類階層一次搞定:
- SELECT * FROM news, news_cate, category AS t1
LEFT JOIN category AS t2 ON t2.cate_parent_id = t1.cate_id
LEFT JOIN category AS t3 ON t3.cate_parent_id = t2.cate_id
WHERE news.news_id = news_cate.ad_id and news_cate.cate_id = t1.cate_id limit 30;
相關網頁
Save
Save