2014-09-25 4 views
0

Я новичок в написании операторов SQL, так что простите меня, если это простой способ задать вопрос SQL. Это, кстати, относится к базе данных wp_postmeta Wordpress.Как фильтровать строки по идентификатору, а затем обновлять другие строки, имеющие одинаковый идентификатор

Я пытаюсь взять строки, выбранные в этом заявлении я написал:

SELECT post_id FROM wp_postmeta WHERE meta_key = 'pb-city' 

И использовать эти POST_ID, чтобы отфильтровать в строках с одинаковым POST_ID, но другим ключом в столбце meta_key. В этот момент, я считаю, что код, который я бы запустить может выглядеть примерно так:

UPDATE wp_postmeta SET meta_value='locations-page' WHERE meta_key='_wp_page_template' 

Я считаю, что проблема в том, что я не знаю, как фильтровать свой объем при обновлении таблицы. Я знаю, как фильтровать, и я знаю, как обновлять, но я не знаю, как взять отфильтрованную таблицу и обновить определенные значения.

Любые советы? Спасибо!

ответ

0

попробовать это для выбора

выберите * из wp_postmeta где post_id в (SELECT post_id FROM wp_postmeta WHERE meta_key = 'рь-город') и meta_key <> 'рь-город'

Update зависит от вашего Объем, например

обновление wp_postmeta набор SET meta_value = 'местоположения страниц' ГДЕ post_id в (SELECT post_id FROM wp_postmeta WHERE meta_key = 'Pb-город') и meta_key = '_wp_page_template'

Перед UPDA т.е попробовать результат с

выберите * от wp_postmeta ГДЕ post_id в (SELECT post_id FROM wp_postmeta WHERE meta_key = 'пб-город') и meta_key = '_wp_page_template'

+0

выберите * из wp_postmeta где post_id in (SELECT post_id FROM wp_postmeta WHERE meta_key = 'pb-city') ----- это, похоже, хорошо работает, чтобы получить значения, которые я ищу, но как бы я обновил это отфильтрованный стол? – wackerfuss

2

Там есть несколько способов сделать это. Вот один соединяющую таблицу обратно к себе предположении, что ваш уникальный идентификатор называется id:

update wp_postmeta p1 
    join wp_postmeta p2 on p1.id <> p2.id and p1.post_id = p2.post_id 
set p1.meta_value='locations-page' 
where p1.meta_key='_wp_page_template' 
    and p2.meta_key = 'pb-city'; 

В качестве альтернативы, вы можете также использовать EXISTS с коррелированных подзапросов, но вы придется использовать дополнительный подзапрос, так как есть небольшое ограничение с вашим rdbms и обновлением записей при использовании той же таблицы в подзапросе:

update wp_postmeta p1 
set p1.meta_value='locations-page' 
where p1.meta_key='_wp_page_template' 
    and exists (
    select 1 
    from (select * from wp_postmeta) p2 
    where p1.id <> p2.id 
     and p2.meta_key = 'pb-city' 
     and p1.post_id = p2.post_id 
    ) 

Edit:

Перечитывая свой пост, возможно, вы не имеете id поле, а вы просто хотите присоединиться на meta_key не являются одинаковыми , Если это так, вы можете просто удалить p1.id <> p2.id из запросов.

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