我有一个以逗号分隔的列表,它存储在mysql表的varchar字段中。
是否可以使用sql查询直接在列表中添加和删除值?或者我是否必须从表中取出数据,在PHP中操作并将其替换回mysql?
答案 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是系统中的一个常量值,可以重复使用,那么你也需要添加一个查找表。
我知道它看起来更有效,但它会为你节省像现在这样的问题,这需要花费更多的时间来解决。