2014-09-25 62 views
0

我是新來編寫SQL語句的,所以請原諒我,如果這是一個問題的SQL問題。順便說一下,這是關於WordPress的wp_postmeta數據庫。如何按ID篩選行然後更新具有相同ID的其他行

我試圖採取這種說法我寫了選擇的行:

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

嘗試一下本作選擇

SELECT * FROM wp_postmeta其中POST_ID在(SELECT POST_ID FROM wp_postmeta WHERE meta_key =「PB城市)和meta_key <>」PB城市

更新取決於你範圍例如

更新wp_postmeta集SET meta_value = '位置頁的' WHERE POST_ID中(選擇POST_ID FROM wp_postmeta WHERE meta_key =「PB城市)和meta_key = '_wp_page_template'

upda之前TE嘗試用結果

SELECT * FROM wp_postmeta WHERE POST_ID在(SELECT POST_ID從那裏meta_key =「PB城市wp_postmeta)和meta_key = '_wp_page_template'

+0

select * from wp_postmeta where post_id in(SELECT post_id FROM wp_postmeta WHERE meta_key ='pb-city')-----這似乎很適合檢索我正在查找的值,但是如何更新此過濾表? – wackerfuss 2014-09-25 20:55:50

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 
    ) 
  • ​​

編輯:

重讀您的文章,也許你沒有一個id領域,而是你只是想加入上meta_key不是相同。如果是這種情況,您可以使用從查詢中刪除p1.id <> p2.id

相關問題