Просто один - или должен быть.
У меня есть несколько полей, которые я хочу сконденсировать и добавить в одно длинное поле.
Я предполагаю, что это функция 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 "и добавить его к ПРИМЕЧАНИЯм без потери данных из этого поля, чтобы результат было бы...
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
Имеет ли это смысл?
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)
Функция CONCAT
может легко справиться с этим в MySQL:
SELECT
ID,
NAME,
POSITION,
CONCAT(NOTES, ' - ', NAME, ' - ', POSITION) AS NOTES
FROM yourTable;
CONCAT
должна быть в состоянии сделать это: dev.mysql.com/doc/refman/8.0/en/…