2013-05-28 56 views
0

我有一个表,其具有像值的标签字段:与查找替换CSV值到另一个表

table1 
______ 
data1, data2, data3 

我有ID的映射到每一块像数据的第二表:

table2 
_________ 
id | info 
1 | data1 
2 | data2 
3 | data3 

等等

我想做一个查找/ table1中更换使得标签字段现在包含了逗号分隔的ID从表2所示:

table1 
______ 
1,2,3 

我的mysql很生锈。我在想这样的事情:

UPDATE table1 
    SET tags = REPLACE(tags, '', '') 
    WHERE tags LIKE ??? 

但可以使用一些帮助填补空白。有什么办法可以做到这一点? 值得注意的是,不幸的是,并不是t1标签中的每一项都会在t2中有匹配的条目。

回答

0

你真的只有一排table1吗?

在任何情况下,你可以做你想做的通过重新构建ID字符串:

update table1 
    set tags = (select group_concat(t2.id) 
       from t2 
       where find_in_set(t2.info, t1.tags) > 0 
       ) 

如果你想要的顺序是一样的原始标签:

update table1 
    set tags = (select group_concat(t2.id order by find_in_set(t2.info, t1.tags)) 
       from t2 
       where find_in_set(t2.info, t1.tags) > 0 
       ) 
+0

没有更多的列/行,但只是为了简单起见 – jco

+0

hmm。这看起来不起作用,因为我只在更新的字段中看到一个值,而其他值为空。我应该提到,如果在t2中没有匹配,理想情况下我想保留t1标记字段中的现有值。 – jco

+0

@jco。 。 。这实际上改变了问题的结构。如果你真的需要这样做,我建议你改变数据库的结构,使标签位于不同的行而不是逗号分隔的列表中。这样的列表通常表示数据库结构不佳。换句话说,这个答案是解决糟糕的数据库设计的一个窍门,但你不想太过分。 –