真的很简单-应该是。
我想压缩多个字段并将其追加到一个长文本字段。
我猜想这是一个concat函数,但是我不知道如何将串联值附加到具有现有值的同一行中的字段上。
是否有MySQL语句可以解决问题,还是我必须运行循环的php脚本?
示例...
ID | NAME | POSITION | NOTES
1 | Richard | Programmer | Not paid enough
2 | David | Manager | Lazy
3 | Hilary | Personnel Manager | Doesn't care
最终,我想删除NAME和POSITION字段,但是我想预先存储这些值,所以我想将“-” .NAME。“-” .POSITION连接起来,并将其附加到NOTES中,而不会丢失该字段中的任何数据结果就是...
ID | NAME | POSITION | NOTES
1 | Richard | Programmer | Not paid enough - Richard - Programmer
2 | David | Manager | Lazy - David - Manager
3 | Hilary | Personnel Manager | Doesn't care - Hilary - Personnel Manager
这有意义吗?
答案 0 :(得分:0)
CONCAT
函数可以在MySQL中轻松处理此问题:
SELECT
ID,
NAME,
POSITION,
CONCAT(NOTES, ' - ', NAME, ' - ', POSITION) AS NOTES
FROM yourTable;
答案 1 :(得分:0)
drop table if exists t;
create table t(ID int, NAME varchar(20), POSition varchar(20),NOTES varchar(500));
insert into t values
(1 , 'Richard' , 'Programmer' , 'Not paid enough'),
(2 , 'David' , 'Manager' , 'Lazy'),
(3 , 'Hilary' , 'Personnel Manager','Doesnt care');
update t
set notes =
CONCAT(NOTES, ' - ', NAME, ' - ', POSITION)
where 1 = 1;
select * from t;
+------+---------+-------------------+------------------------------------------+
| ID | NAME | POSition | NOTES |
+------+---------+-------------------+------------------------------------------+
| 1 | Richard | Programmer | Not paid enough - Richard - Programmer |
| 2 | David | Manager | Lazy - David - Manager |
| 3 | Hilary | Personnel Manager | Doesnt care - Hilary - Personnel Manager |
+------+---------+-------------------+------------------------------------------+
3 rows in set (0.00 sec)
最终,我要删除NAME和POSITION字段您确定要这样做吗?再次将比特取出来是很痛苦的。
如果任何元素为null,则concat如果不保证某个元素具有值,则将返回null,则需要进行ifnull测试
update t
set notes =
CONCAT(IFNULL(NOTES,''), ' - ', IFNULL(NAME,''), ' - ', IFNULL(POSITION,''))
where 1 = 1;
drop table if exists t;
create table t(ID int, NAME varchar(20), POSition varchar(20),NOTES varchar(500));
insert into t values
(1 , 'Richard' , 'Programmer' , 'Not paid enough'),
(2 , 'David' , 'Manager' , 'Lazy'),
(3 , 'Hilary' , 'Personnel Manager','Doesnt care'),
(4 , 'HILARY' , NULL,'DOES NOW') ;
update t
set notes =
CONCAT(IFNULL(NOTES,''), ' - ', IFNULL(NAME,''), ' - ', IFNULL(POSITION,''))
where 1 = 1;
+------+---------+-------------------+------------------------------------------+
| ID | NAME | POSition | NOTES |
+------+---------+-------------------+------------------------------------------+
| 1 | Richard | Programmer | Not paid enough - Richard - Programmer |
| 2 | David | Manager | Lazy - David - Manager |
| 3 | Hilary | Personnel Manager | Doesnt care - Hilary - Personnel Manager |
| 4 | HILARY | NULL | DOES NOW - HILARY - |
+------+---------+-------------------+------------------------------------------+
4 rows in set (0.00 sec)