2012-03-04 45 views
0

我遇到了主题中指定的问题。 我想在一个查询中的表中更新多个行,具体取决于行的特定ID。我想要更新的不幸的行是文本类型的数据(使用数字数据很容易)。这是我的查询:MYSQL - 更新表格中的文本值,无需选择,带有大小写(更新一个查询)

UPDATE table SET column = CASE 
WHEN id = 2 THEN column = column + ', 100' 
WHEN id = 3 THEN column = column + ', 10' 
[...] 
ELSE column 
END; 

数据从PHP的崩盘,所以它看起来像:

id | column 
------------ 
2 | 5, 6, 20 
3 | 7, 12, 200 

执行查询后,我想有:

id | column 
------------ 
2 | 5, 6, 20, 100 
3 | 7, 12, 200, 10 

如何将这些值添加到指定的行?现在它将“列”行更改为id 2和3(例如它是整数类型的值)。

我还想问你如何从列isntead删除其添加的具体值:

id | column 
------------ 
2 | 5, 7, 20 
3 | 7, 12, 200 

,我想从两个行删除“7” - 所以之后id为2和3查询它看起来像这样:

id | column 
------------ 
2 | 5, 20 
3 | 12, 200 

任何帮助,将不胜感激 - 我坚持了下来:/

+0

不,你应该接受通过点击大空打勾的答案,使之成为绿色对勾:HTTP: //stackoverflow.com/faq#howtoask如果你负责设计上面的数据库模式,你应该阅读规范化的东西(尤其是这个:http://en.wikipedia.org/wiki/First_normal_form#Repeating_groups_within_columns)。 – biziclop 2012-03-04 13:34:19

+0

我还没有注意到,'剔'较早:)我的坏:> – Kalreg 2012-03-04 17:03:00

回答

0

插入:

UPDATE table 
    SET column = CASE 
     WHEN id = 2 
     column = CONCAT(column, ', 100') 
     WHEN id = 3 
     column = CONCAT(column, ', 10') 
     ELSE 0 
     END 

对于删除,你可以像dis。对不起,我现在无法执行查询。未测试!

UPDATE table 
    SET column = CASE 
     WHEN id = 2 
     column = replace(column,', 7','') 
     WHEN id = 3 
     column = replace(column,', 7','') 
     ELSE 0 
     END 

用于更新:如果你想的7值更改为14

UPDATE table 
    SET column = CASE 
     WHEN id = 2 
     column = replace(column,'7','14') 
     WHEN id = 3 
     column = replace(column,'7','14') 
     ELSE 0 
     END 
+0

hank你很多。我也为自己找到了这个答案:) 第一个示例不起作用,但可以使用CONCAT功能执行此操作: UPDATE TABLE SET column = CASE WHEN id = 2 THEN CONCAT('column',',99') 当id = 3则CONCAT('column',',101') ELSE列 END; 问题解决。再次与堆栈溢出的朋友们 - 我总是依靠你,thx。 – Kalreg 2012-03-04 13:42:59