次のように私は、MySQLのテーブルを持っています:
ID | 名前| PARENT_ID 19 | カテゴリ1 | 0 20 | カテゴリ2 | 19 21 | カテゴリー3 | 20 22 | category4 | 21 ......
今、私はMySQLのクエリをしたい、私だけのid [すなわち、結果は「IDS '20、21,22を持つ必要があります]その後、私はそのすべてのサブIDを取得する必要があります[例えば、「ID = 19」と言う] ....そして、子供の成績が、それは変更することができますかわからない....
また、私は可能であれば、私は同じ機能を実現するために、単一のMySQLクエリを使用する方法を知ってみましょう.....ループ解決のために使用する必要があります。
ソリューション:
1.あなたがしている場合のMySQL 8は、再帰的な使用where
句を:
再帰CTE(ID、名前、PARENT_ID)を有するとして( 選択 ID、 名前、 PARENT_ID から 製品 PARENT_ID = 19 組合全て選択 p.id、 p.name、 p.parent_id から 製品Pの 内側にCTEを参加 p.parent_idに = CTEを.ID )を選択 * から CTE;
where
指定された値は、親のすべての子孫を選択するように設定する必要がありますCONNECT BY
。
MySQLバージョン(バージョン5.7まで)をサポートしていません2.共通テーブル式は、あなたがこれを達成するために、次のクエリを使用することができます。
選択 ID、 名前、 PARENT_ID から (選択 * から製品 PARENT_ID、ID順)products_sorted、 (選択:= @pv ' 19 ' 初期化) FIND_IN_SET(PARENT_ID、@pv) と長さ(@pv: =連結(@pvを、' '、ID))
これはバイオリンです。
ここでは、where
指定された値は、親のすべての子孫を選択するように設定する必要がありますCONNECT BY
。