2017-03-22 78 views
0

我有兩個表:MySQL - 基於列的值加入?

Table "categories" 

category | parents 
1   | 5,4,1 
2   | 3,2 

列的父母是數以逗號分隔的組,因此它可以在查詢中被用作IN(parents)

Table "categories_goods" 

item | category 
10 | 1 
12 | 2 

而且我想將數據導出到第三個表 - 每個類別都會有所有的父母。結果應該是:

Table "categories_goods_all" 

item | category 
10 | 5 
10 | 4 
10 | 1 
12 | 3 
12 | 2 

我已經在PHP中解決了這個問題,但是在表categories_goods中有10000 * x的行時它很慢。所以我正在尋找純粹的MySQL解決方案。有任何想法嗎?

回答

1

使用此

演示: http://rextester.com/CAF76544

查詢

select 
    g.item, 
    SUBSTRING_INDEX(SUBSTRING_INDEX(c.parents, ',', numbers.n), ',', -1) category1 
from 
    (select 1 n union all 
    select 2 union all select 3 union all 
    select 4 union all select 5) numbers 
INNER JOIN categories c 
    on CHAR_LENGTH(c.parents) 
    -CHAR_LENGTH(REPLACE(c.parents, ',', ''))>=numbers.n-1 
    inner join categories_goods g 
    on c.category=g.category 
order by 
    c.category, n 

由於這個answer到CSV拆分行。

說明:number表生成號碼1 - 5。如果需要更多parent,您可能需要在此添加更多行。在它的幫助下,您可以將csv分隔列。請參閱上面給出的答案URL。

現在你只需要做一個加盟categories_goods獲取對應parent

+0

item謝謝,這真是棒極了! :)有沒有辦法如何使它解析任何數量的值?現在它可以與5.我可以手動添加選擇6聯合所有......但它可以無限地以某種方式? –