2016-11-05 7 views
2

ように私は、データベーステーブルを持っている:私は、SQLクエリを使用してPARENT_IDに親カテゴリや店舗のIDを取得したい複数のクエリまたは関数を使用する必要がありますか?

id name fullname   parent_id 
-- ---- ----------------- --------- 
1 cat1 cat0 > cat1   null 
2 cat2 cat0 > cat1 > cat2 null 
3 cat3 cat1 > cat3   null 

例:3行目の 'cat1'は親カテゴリ 'cat3'です。親カテゴリのIDを取得し、parent_idフィールドに格納します。

私は親カテゴリの名前を付けることができますどこから

select id,name, 
     substring_index(
         substring_index(fullname, '>', -2),'>',1) 
     as parent from categories 

を使用して、親猫の名前をsplited。

のような出力が必要です。

id name fullname   parent_id 
-- ---- ----------------- --------- 
1 cat1 cat0 > cat1   null 
2 cat2 cat0 > cat1 > cat2 1 
3 cat3 cat1 > cat3   1 
+0

良いアイデアがで 'fullname'を使用しているようだしないでくださいこのフォーム 'cat3> cat0' – McNets

+0

親カテゴリのIDとフィールドへの保存parent_id @JuanCarlosOropeza –

+0

同じテーブルと結合するために親の名前を使用します。 –

答えて

2

あなたは、単純なと親が参加得ることができます。

select c.*, cp.id as parentid 
from categories c join 
    categories cp 
    on c.fullname = concat(cp.fullname, ' > ', c.name); 

あなたはupdateに直接これを回すことができます。

update categories c join 
     categories cp 
     on c.fullname = concat(cp.fullname, ' > ', c.name) 
    set c.parentid = cp.id; 
+0

あなたはその仕事のしくみを説明できますか?私はフィドルを作成しようとし、1行だけを返しますhttp://sqlfiddle.com/#!9/1fe876/2 –

+0

@JuanCarlosOropeza。 。 。正しいデータで、それは動作します:http://sqlfiddle.com/#!9/bb1f67/1。 –

+0

それはもっと理にかなっていますが、それがどういうふうに見えるかわかりません。 –

関連する問題