Я хотел извлечь определенные значения из базы данных, чтобы загрузить файлы на новый сервер.Я мог бы скопировать и вставить со старого сервера на новый, но я не хотел, чтобы старые файлы там больше не использовались.Вот что я пытаюсь сделать.
В этой таблице products_description
хранятся HTML-коды.
Вот схема
Пример данных о продукте
Я хотел извлечь следующую подстроку:
/zc156/product_pdf/[manufacturer]/[name].pdf
/zc156/product_img/[manufacturer]/[name].jpg
/zc156/product_img/[manufacturer]/[name].png
Мне удалось получить большинство (если не все PDF-файлы) файлов, используя следующую2 запроса ...
Для первого PDF-файла
SELECT
SUBSTRING(`products_description`.`products_description`,
LOCATE('/zc156/product_pdf/', `products_description`.`products_description`),
LOCATE('.pdf', `products_description`.`products_description`) - LOCATE('/zc156/product_pdf/', `products_description`.`products_description`) + 4)
AS 'ProductFile' FROM `products_description`
INNER JOIN `products` ON `products`.`products_id` = `products_description`.`products_id`
WHERE CONVERT(`products_description` USING utf8) LIKE '%/zc156/product_pdf/%'
AND `products`.`products_status` = 1
Для остальных PDF-файлов
SELECT
SUBSTRING(`products_description`.`products_description`,
LOCATE('</a>', `products_description`.`products_description`),
LOCATE('</tr>', `products_description`.`products_description`) - LOCATE('</a>', `products_description`.`products_description`))
AS 'ProductFile' FROM `products_description`
INNER JOIN `products` ON `products`.`products_id` = `products_description`.`products_id`
WHERE CONVERT(`products_description` USING utf8) LIKE '%/zc156/product_pdf/%'
AND `products`.`products_status` = 1
Однако, когда дело доходит до JPG или PNGимена файлов ... Делать подстроку сложнее, поскольку имена файлов изображений охватывают более одной ячейки, и они повторяются по определенному шаблону ... Я попытался выполнить поиск здесь и нашел эту тему.
Извлечь подстроку с помощьюопределенный шаблон в MySql
Итак, я попытался поместить некоторые из моих собственных данных ... но мой результат не тот, который я хотел. Попытка SQL Fiddle
Поэтому мне интересно, есть ли более чистый способ сделать это.Возможно, придется сложить с парой функций substring
и / или left
.