как изменить / обновить начальные символы пути изображения новыми значениями - PullRequest
1 голос
/ 21 февраля 2020

У меня есть такая таблица:

CREATE TABLE user_post (
  id int(30) ,
  user_id  int(11),
  text     mediumtext,
  image_path    varchar(4000) ,
  video_path      varchar(4000) ,
  created_date   timestamp NULL DEFAULT NULL,
)  

В этой таблице мы храним пути к изображениям. Раньше мы не использовали CDN, поэтому наш путь к изображению выглядел следующим образом:

62197/Files/1582028253362.jpg

, но теперь после использования CDN путь к изображению изменился и выглядит так:

https://s3-**********-1.amazonaws.com//abccdn/1582285090974.jpg

Теперь Я хочу изменить старый путь к изображению, он должен начинаться с https://. Я не хочу менять изображение вручную за изображением.

Есть ли сценарий?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

Да, вы можете использовать запрос для обновления этих значений.

Сначала вам понадобятся логики c для преобразования значений типа 62197/Files/1582028253362.jpg в значения типа 1582028253362.jpg

Попробуйте использовать SUBSTRING_INDEX () , что-то вроде этого:

SELECT SUBSTRING_INDEX(image_path, '/', -1) 

Запустите это на некоторых ваших данных, чтобы убедиться, что вы работаете.

Затем выполните операцию UPDATE примерно так.

UPDATE user_post 
   SET image_path = CONCAT(
        'https://s3-**********-1.amazonaws.com//abccdn/',
        SUBSTRING_INDEX(image_path, '/', -1)) 
 WHERE image_path NOT LIKE 'https://s3-%'

Обратите внимание, что ваши старые пути начинаются с такими номерами, как 62197/Files ... Логика c, которую я вам дал, устраняет эти цифры. Это может или не может быть правильным для вашей ситуации: вы должны проверить.

Еще одна вещь, чтобы рассмотреть. Если вы можете, измените запрос SELECT, который вы используете, чтобы получить эти значения image_path, чтобы он возвращал пути к вашему CDN. Оставьте значения image_path в таблице без изменений и манипулируйте ими при извлечении. Затем, если что-то в вашей установке CDN изменится, вы можете изменить только запрос SELECT. Хороший способ сделать это - создать представление и использовать его при извлечении записей. Например:

CREATE OR REPLACE VIEW user_post_cdn AS
SELECT id, user_id, text, 
       CONCAT('https://s3-**********-1.amazonaws.com//abccdn/', 
       SUBSTRING_INDEX(image_path, '/', -1)) image_path,
       video_path, created_date
  FROM user_post;

Затем, когда вам нужны ваши пути cdn из базы данных, вы говорите что-то вроде этого.

  SELECT * FROM user_post_cdn WHERE id = whatever;

Таким образом

  • вы не рискуете повредить данные image_path, обновив их.
  • если что-то изменится в вашей настройке CDN, вы можете просто изменить определение представления, и все будет работать.
0 голосов
/ 21 февраля 2020

Конечно, вы можете обновить как:

SET @var_starts_with := 'https://';
UPDATE user_post
SET image_path := CONCAT(@var_starts_with, image_path)
WHERE image_path NOT LIKE CONCAT(@var_starts_with, '%')
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...