2017-06-14 48 views
1

我有一个MySQL表MySQL的选择不同的逗号分隔值

id  cid c_name  keywords 
1  28 Stutgart BW,Mercedes,Porsche,Auto,Germany 
2  34 Roma  Sezar,A.S. Roma 
3  28 München  BMW,Oktober Fest,Auto,Germany 

我需要一个查询,以显示从CID = 28的关键字,但我希望看到只有1次的关键词,如(BW,奔驰,保时捷,Auto,Bmw,Oktober Fest,德国) 我不想列出2次关键字,怎么能解决这个问题?

我已经尝试不同的,但不能得到我想要什么

+2

您应该规范化数据模型。存储逗号分隔值是一个非常糟糕的主意。 –

+0

想要正常化我的分贝,但它需要很长时间我.. .. 98k条目:( – Berdan

+0

耸耸肩100k行是*没有*时下 –

回答

1

拆分它添加它之前大势已去DISTINCT.Of当然,更好的是一定要规范你的数据(一列不超过1倍的值)

SELECT 
    GROUP_CONCAT(DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(keywords, ',', n.digit+1), ',', -1)) keyword 
FROM 
    t 
    INNER JOIN 
    (SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6) n 
    ON LENGTH(REPLACE(keywords, ',' , '')) <= LENGTH(keywords)-n.digit 
WHERE cid=28 

See it working

+0

我怎么能打印此查询:( 思维规范我的分贝,但它将需要很长时间我.. .. 98k条目:( – Berdan

+0

@Berdan我不明白你的意思是打印这个查询。 – Mihai

+1

我用爆炸和分裂,我得到了我想要的,但谢谢。 – Berdan