X

MySQL 多層的目錄階層 一次查詢完成

資料庫設計分類、目錄等等的結構,要去考量有幾個階層,當階層不明確,或者階層很多,通常會用下述設計方式(想要幾個階層都可以):

  • 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

Tsung: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post