0

私はテーブルを持っています

+-------------+----------------------+--------------------+
| category_id | name                 | parent_category_id |
+-------------+----------------------+--------------------+
|           1 | Pizzas               |               NULL |
|           2 | Cheese Pizzas        |                  1 |
|           3 | Spicy Pizzas         |                  1 |
|           4 | Shakes               |               NULL |
|           5 | Milk Shakes          |                  4 |

私は単一レベルのネスティングしかなく、それは同じになるでしょう

次のような行を取得したい

Pizza
   Cheese Pizzas
   Spicy Pizzas
Shakes
   Milk Shakes

OracleのようにMySQLに「ツリー」のようなものはありますか、記事http://ftp.nchu.edu.tw/MySQL/tech-resources/articles/hierarchical-data.html

ネストの動的レベルがある場合、テーブル構造を変更する方が実行可能のようです。私の場合、全体で 1 になります。

助言がありますか?

4

1 に答える 1

3

自己結合を使用して、次のようなことを行うことができます。

SELECT   parent.category_id, parent.name AS parent, child.name AS child
FROM     my_table parent JOIN my_table child
      ON parent.parent_category_id IS NULL
     AND child.parent_category_id = parent.category_id
ORDER BY parent.category_id, child.category_id

sqlfiddleで参照してください。

または、必要に応じて結果をグループ化することもできます。

SELECT   parent.name, GROUP_CONCAT(child.name ORDER BY child.category_id)
FROM     my_table parent JOIN my_table child
      ON parent.parent_category_id IS NULL
     AND child.parent_category_id = parent.category_id
GROUP BY parent.category_id
ORDER BY parent.category_id

sqlfiddleで参照してください。

于 2012-10-06T07:52:29.580 に答える