Как изменить много элементов, используя php и mysql

Это моя таблица предметов в 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?

пожалуйста, помогите мне наилучшим образом.

1

Решение

UPDATE tablename SET k_id = CONCAT('"', REPLACE(k_id,',','","'), '"');
1

Другие решения

Не проверял, но как то так

UPDATE tablename SET k_id = CONCAT('"', REPLACE(k_id, ',', '","'), '"')
3

Я предполагаю, что вы хотите, чтобы данные в отдельных строках были такими, чтобы вы могли использовать их в операторе 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;
1

Использовать этот
Используйте функцию Concat и замените функцию в MySQL

update TableName set k_id=CONCAT('"', REPLACE(',', '","', k_id, '"');
0

Другим способом было бы получить все значения, выполнить манипуляции со строками в PHP и заново вставить — но мне больше нравится способ Cheery. Хотя, если вам нужно поместить ваши целые числа в строки в вашей базе данных, похоже, что у вас может быть другая проблема в другом месте, которую можно решить, не меняя все значения, подобные этому.

0
    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)
-1
По вопросам рекламы [email protected]