Редактировать текст в столбцах - PullRequest
0 голосов
/ 26 августа 2010

Просто интересно, может ли кто-нибудь помочь мне со следующей проблемой.

У меня есть база данных в MySQL, и я использую PHPMyAdmin для взаимодействия с базой данных.

Итак, в таблице example_table_name у меня есть два столбца product_item_short и product_item_long, в которых есть URL-адреса. Теперь есть 3000 строк данных, и, например, URL в каждой начинается с data/image/someimage.png.

В обоих столбцах мне нужно удалить data/, и я хотел бы знать, как я могу это сделать в SQL.

Большое спасибо

Ответы [ 4 ]

2 голосов
/ 26 августа 2010

Вы можете использовать функцию SUBSTR():

UPDATE your_table 
SET    product_item_short = SUBSTR(product_item_short, 6),
       product_item_long = SUBSTR(product_item_long, 6);

Контрольный пример:

CREATE TABLE your_table (
    id int, 
    product_item_short varchar(50), 
    product_item_long varchar(50)
);


INSERT INTO your_table VALUES (1, 'data/image/someimage.png',         'data/image/someimage.png');
INSERT INTO your_table VALUES (2, 'data/other-folder/someimage.png',  'data/other-folder/someimage.png');
INSERT INTO your_table VALUES (3, 'data/no-folder.png',               'data/no-folder.png');
INSERT INTO your_table VALUES (4, 'data/image/path/three-levels.png', 'data/image/path/three-levels.png');

Результат после UPDATE:

SELECT * FROM your_table;
+------+-----------------------------+-----------------------------+
| id   | product_item_short          | product_item_long           |
+------+-----------------------------+-----------------------------+
|    1 | image/someimage.png         | image/someimage.png         |
|    2 | other-folder/someimage.png  | other-folder/someimage.png  |
|    3 | no-folder.png               | no-folder.png               |
|    4 | image/path/three-levels.png | image/path/three-levels.png |
+------+-----------------------------+-----------------------------+
4 rows in set (0.00 sec)

UPDATE:

Если вы решили устранить первую директорию пути, будь то data/ или anything-else/, вы можете использовать функцию LOCATE() как @ Frank's предложил в другом ответе:

UPDATE your_table 
SET    product_item_short = SUBSTR(product_item_short, LOCATE('/', product_item_short) + 1),
       product_item_long = SUBSTR(product_item_long, LOCATE('/', product_item_long) + 1);
1 голос
/ 26 августа 2010

Если вы хотите быть более гибким, чем то, что Даниэль описал в своем ответе, вы можете использовать что-то вроде

SUBSTR(product_item_short, LOCATE('/', product_item_short) + 1)

, которое обрезает все после первого слэша.

1 голос
/ 26 августа 2010
UPDATE tablename
SET product_item_short = REPLACE(product_item_short, 'data/image/someimage.png', 'newurl/something.png');
0 голосов
/ 26 августа 2010
UPDATE example_table
SET product_item_short = SUBSTRING(product_item_short,6),
    product_item_long = SUBSTRING(product_item_long,6);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...