2017-01-17 9 views
1

Это не WordPress специфично, но стоит отметить, что это WP дб Я работаю с ...Массового обновления MySQL таблица с данными сцепленных из другой таблицы

мне нужно обновить значение posts таблицы post_title для всех записей с post_type='appearance'. Текущий post_title начинается с нужного имени, но заканчивается «внешним видом [some #]». Таким образом, от «внешнего вида» до конца необходимо удалить, и его необходимо заменить на meta_value из таблицы postmeta, где meta_key = _place_id и post_id равна ID из таблицы posts.

Например: есть сообщение с ID 102 под названием «John Doe appearance 102». В таблице postmeta, где meta_key = _place_id и post_id = 102, meta_value = 108. Таким образом, конечным результатом будет то, что post_title = John Doe 108.

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

UPDATE posts 

SET post_title = TRIM(TRAILING ' appearance %' FROM post_title) 

WHERE post_type='appearance' 

и

UPDATE posts 

left join postmeta on 
    posts.ID= postmeta.post_id 
set 
    posts.post_title = CONCAT(posts.post_title, " ", postmeta.meta_value WHERE postmeta.meta_key = '_place_id') 

ответ

1

Вы можете сделать это в одном запросе путем использования SUBSTRING_INDEX():

UPDATE posts p 
LEFT JOIN postmeta pm 
    ON p.ID = pm.post_id 
SET p.post_title = CONCAT(SUBSTRING_INDEX(p.post_title, 'appearance', 1), pm.meta_value) 
WHERE pm.meta_key = '_place_id' 

Taking SUBSTRING_INDEX('John Doe appearance 102', 'appearance', 1) бы вернуть все до того появление appearance, которое составляет John Doe (с пространством в конце) , Затем мы можем просто конкатенировать на meta_value.

+0

Это выглядит великолепно. К сожалению, я получаю сообщение об ошибке: 'Неверное количество параметров в вызове функции native 'SUBSTRING_INDEX'' – David

+0

@David Извините, исправил опечатку, теперь она должна работать. –

+0

Спасибо. Красивый. Одна вещь, которая отсутствовала, но оказалась прекрасной, указывала post_type. – David

Смежные вопросы