2015-02-23 3 views
1

У меня есть WordPress таблицы базы данных называется «wp_postmeta»SQL строка обновление на основе другой строки

Похоже, что это (упрощенный)

wp_postmeta

Вот что я хочу сделать в английском, надеюсь, кто-то может помочь мне перевести это в реальный оператор SQL.

если meta_key (адрес) LIKE "% Портланд%", обновление meta_value (post_city_id), чтобы быть 7,17" , где post_id такие же,

Таким образом, в конце концов, это будет выглядеть так:. enter image description here

Я попытался это, но не выбрано ни одной строки при выполнении.

UPDATE wp_postmeta 
SET wp_postmeta_bak.meta_value = "7,17" 
WHERE wp_postmeta.meta_key = "post_city_id" 
AND 
wp_postmeta.meta_key = "address" AND wp_postmeta.meta_value LIKE "%Portland" 

Я читал в других вопросах здесь об использовании временной таблицы, но то выше моего класса заработной платы.

+0

Я пробовал это, но не было выбранных строк при выполнении. – user929837

ответ

0

Ааа, ключ таинственное и чудесное wp_postmeta/значение магазина свиноматок больше таинственности и чудо. Для сопоставления строк postmeta, связанных с одними и теми же значениями post_id, вам нужно самосоединение.

Вам необходимо обновить правую сторону таблицы с самозаряжающимися элементами.

UPDATE wp_postmeta a 
    JOIN wp_postmeta b ON a.post_id = b.post_id 
         AND b.meta_key = 'address' 
         AND b.meta_value LIKE '%Portland%' 
    SET a.meta_value = '7,17' 
    WHERE a.meta_key = 'post_city_id' 

Соединить даст пустой результирующий если все три матча ON критериев. Когда он даст непустой набор результатов, он обновит правильные строки.

Прежде чем вы сделаете это обновление, вы можете проверить, что он выбирает правильные строки с этим запросом.

SELECT a.meta_id, a.post_id, a.meta_key, a.meta_value, 
     b.meta_value AS address 
    FROM wp_postmeta a 
    JOIN wp_postmeta b ON a.post_id = b.post_id 
         AND b.meta_key = 'address' 
         AND b.meta_value LIKE '%Portland%' 
    WHERE a.meta_key = 'post_city_id' 

Строки в post_meta, которые будут обновлены, имеют значения meta_id, показанные в этом результирующем наборе.

+0

Спасибо Олли Дж, что сработало !. Также благодаря eflores89 для предложений – user929837

0

Вы не получаете никаких результатов, потому что вы говорите код две разные эксклюзивные вещи:

1) где meta_key = «post_city_id» И

2) где же столбец = «адрес».

Из того, что я вижу, это либо тот, и другой. У вас не может быть обоих. Это, наверное, опечатка.

WHERE wp_postmeta.meta_key = "post_city_id" 
AND 
wp_postmeta.meta_key = "address" 

AND wp_postmeta.meta_value LIKE "%Portland"