2017-11-09 8 views
0

私は以下のように 'category'という名前のmysqlテーブルを持っています.itはparent_idフィールドが親カテゴリIDを参照し、各カテゴリにn個の子カテゴリを追加できます。複数のカテゴリ、私はそれを選択する必要がありますid.so特定のカテゴリのテーブルからカテゴリとそのサブカテゴリのすべてを返すようにクエリを記述する必要がmysqlクエリを使用してすべての子カテゴリを返す

enter image description here

「A-1」のようなものですすべての子カテゴリとその子カテゴリの子のすべてを取得するまでです。このため、私は迷惑クエリを書いています。

select @pv:=id as category_id, name, parent_id from category 
join (select @pv:=1)tmp where [email protected] 

そして、それは

enter image description here

しかし、ここで私たちは、このリスト内のカテゴリの全てが-1.butの子であることはないことがわかりCAを次のようにのような唯一の3行を返します。それらのすべてを返す。私はこれを修正できますか?

+0

あなたはストレージモデルを再考する必要があります。その周りに他の簡単な方法はありません。 MySQLは再帰関数も他のウィンドウ関数もサポートしていません。そのため、ツリーストレージの現在のパターン( "隣接ツリー")はあなたの仕事では機能しません。 [this](https://stackoverflow.com/questions/4048151/what-are-the-options-for-storing-hierarchical-data-in-a-relational-database)を参照してください。 –

+1

MySQLは再帰をサポートしています。https: //dev.mysql.com/doc/refman/8.0/en/with.html#common-table-expressions-recursive – JimmyB

+0

@JimmyB ok、最新のものです。それから、特定のバージョンにまで沸きます –

答えて

0

すべての子が親より大きなIDを持つように見えます。それを考慮して、以下のようにクエリを変更できますか?

select @pv:=id as category_id, name, parent_id from category 
where parent_id >@pv 
+0

カテゴリが多数ありますが、1つではありません – Shin

+0

あなたは「特定のカテゴリについて」と言っています。したがって、上記の解決策。それは "(1,2,3)のparent_id"のようなものですか?もしそうなら、なぜORDER BY id、parent_idを使用しないのですか? –

+0

このクエリは空の結果を返します – Shin

関連する問題