Прежде всего, обратите внимание, что на этот вопрос здесь нет ответа: MySQL обновить таблицу на основе другого значения таблицы или даже любого другого вопроса или ответа на стек, который я смог найти!
Я преобразовал форум на веб-сайте, и теперь мне просто нужно восстановить внутренние URL-ссылки в нескольких сотнях сообщений.
Сообщения находятся в столбце post_content в таблице xyz_posts
ID post_content
1467 This is great https://example.com/index.php?topic=1234 I really like it
1468 Hello world
1469 Take a look https://example.com/index.php?topic=5678.0
Вы можете видеть, что URL-адреса в основном скрыты в тексте сообщения , Обратите внимание, что приведенный выше пример иногда может быть записан с topic = 1234.0 в конце, хотя на самом деле он хранится в базе данных как значение 1234. Я не хочу переписывать URL-адрес и случайно сохранять .0
Вот пример того, как мне нужно, чтобы эта таблица выглядела:
ID post_content
1467 This is great https://example.com/finished-page/ I really like it
1468 Hello world
1469 Take a look https://example.com/another-page/
Итак, таблица xyz_converter отображает старый номер topi c на новый идентификатор сообщения, подобный следующему:
meta_key meta_value value_id
_bbp_old_topic_id 1234 15675
_bbp_old_reply_id 1234 17439
Будьте здесь осторожны, число 1234 также существует в этой таблице для ответов на форумах, которые нам не нужны, но meta_key и value_id отличаются для тех, которые показаны. Этот SQL запрос работает для получения правильного ответа:
SELECT * FROM `xyz_converter` WHERE meta_key LIKE '_bbp_old_topic_id' AND `meta_value` LIKE '1234'
Также в таблице xyz_posts мы сопоставляем вышеупомянутый value_id с суффиксом URL поста, например:
ID post_name
15675 finished-page
15676 another-page
Как создать запрос SQL, который обнаружит значение meta_value в одной таблице и затем заменит его на правильный окончательный URL-адрес, как упоминалось?
ОБЗОР ПРОЦЕССА
- Обнаружение URL в xyz_posts post_content
- Извлечение числа topi c из URL (например, 1234). Если это 1234.0, тогда возьмите всего 1234
- . Преобразуйте его в номер записи, найденный в xyz_converter value_id (например, 15675), убедившись, что он находится рядом с _bbp_old_topic_id
- Возьмите суффикс URL-адрес в xyz_posts имя_почты (например, «готовая страница»)
- Переписать исходный URL-адрес, включив суффикс (не забывая завершающие косые черты).
Я использую MySQL 5.7.29 и PHPMyAdmin . Я довольно новичок в SQL запросах и нубе Regex, но готов узнать больше!