Это моя таблица предметов в MySQL
----------- -------------
| id | k_id |
----------- -------------
| 1 | 12,2,65,98 |
----------- -------------
| 2 | 2,5,77,234 |
----------- -------------
| 3 | 48,125,119 |
----------- -------------
И эта таблица имеет 120000 строк.
Теперь я хочу изменить все значения в k_id
столбец как этот:
----------- ---------------------
| id | k_id |
----------- ---------------------
| 1 | "12","2","65","98" |
----------- ---------------------
| 2 | "2","5","77","234" |
----------- ---------------------
| 3 | "48","125","119" |
----------- ---------------------
Как это сделать?
Можно сделать это с помощью php?
Можно сделать это в phpmyadmin в cpanel?
пожалуйста, помогите мне наилучшим образом.
UPDATE tablename SET k_id = CONCAT('"', REPLACE(k_id,',','","'), '"');
Не проверял, но как то так
UPDATE tablename SET k_id = CONCAT('"', REPLACE(k_id, ',', '","'), '"')
Я предполагаю, что вы хотите, чтобы данные в отдельных строках были такими, чтобы вы могли использовать их в операторе IN () … это необязательно, поскольку в MySQL есть метод для обработки этого точного типа данных (он же список, разделенный запятыми)
SELECT id FROM table WHERE FIND_IN_SET('5', k_id) > 0;
это вернет идентификатор 3 .. однако я бы порекомендовал вам нормализовать вашу базу данных … хранение значений через запятую всегда плохая идея ..
CREATE TEMPORARY TABLE IF NOT EXISTS normalized_table AS
( SELECT
id,
SUBSTRING_INDEX(SUBSTRING_INDEX(k_id, ',', n.digit+1), ',', -1) column2
FROM test
JOIN(SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) n
ON LENGTH(REPLACE(k_id, ',' , '')) <= LENGTH(k_id)-n.digit
ORDER BY id, n.digit
);
DROP table test; -- test is just a dummy name for the name of your table
CREATE table test (id int, k_id int);
INSERT INTO test (id, k_id)
SELECT id, k_id FROM normalized_table;
Использовать этот
Используйте функцию Concat и замените функцию в MySQL
update TableName set k_id=CONCAT('"', REPLACE(',', '","', k_id, '"');
Другим способом было бы получить все значения, выполнить манипуляции со строками в PHP и заново вставить — но мне больше нравится способ Cheery. Хотя, если вам нужно поместить ваши целые числа в строки в вашей базе данных, похоже, что у вас может быть другая проблема в другом месте, которую можно решить, не меняя все значения, подобные этому.
try
UPDATE my_table SET k_id = CONCAT('"', REPLACE(k_id, ',', '","'), '"')
UPDATE my_table SET k_id = CONCAT( k_id, ", ", "999") ;
//Use the function mysql CONCAT_WS() -> Concatenate With Separator
UPDATE TABLE_NAME SET FIELD_NAME = CONCAT_WS(",",k_id)