2011-07-10 61 views
2

我有一个逗号分隔列表,即时存储在一个MySQL表中的varchar字段。MYSQL逗号分隔列表,可能添加和删除值?

是否可以直接使用sql查询从列表中添加和删除值?或者我必须从数据表中取出数据,在PHP中操作并将其替换回mysql?

+3

现在你明白为什么规范化很重要。 –

+0

你在做什么 - 你想在SQL中编写自己的小数据库吗? –

+0

你能更具体地说明你如何试图操纵这个字符串吗?你确定你需要将一个字符串存储到这个表中吗?这是非常糟糕的做法,除非你正在做一些事情,比如预先计算你无法实时为用户做的事情。 –

回答

4

在MySQL中InnoDB和MyIsam引擎没有办法做到这一点。可能在其他引擎(检查CSV引擎)。
您可以在存储过程中执行此操作,但不建议。
你应该做些什么来解决这样一个问题,就是重构你的代码和规范你的DB =>
原始表

T1: id | data     | some_other_data 
    1 | gg,jj,ss,ee,tt,hh  | abanibi 

要成为:

T1: id | some_other_data 
    1 | abanibi 

T2: id | t1_id | data_piece 
    1 | 1  |  gg 
    2 | 1  |  jj 
    3 | 1  |  ss 
    4 | 1  |  ee 
    5 | 1  |  tt 
    6 | 1  |  hh 

,如果data_piece是一个恒定值在很多重用的系统中,您还需要添加一个查找表。

我知道它看起来更多的工作,但它会为您节省像现在这样的问题,这需要更多的时间来解决。