我有一个名为" wp_postmeta"
的wordpress数据库表看起来像这样(简化)
以下是我想用英语做的事情,希望有人可以帮助我将其翻译成实际的SQL语句。
如果meta_key(地址)LIKE"%Portland%&#34 ;,则将meta_value(post_city_id)更新为7,17" post_id是相同的。
所以最后看起来像:
我尝试了这个,但执行时没有选择任何行。
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 :(得分: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"
答案 1 :(得分:0)
啊,这个神秘而精彩的wp_postmeta钥匙/超值商店播出了更多的神秘和奇迹。您需要一个自联接来关联与相同post_id值相关的postmeta行。
您需要更新自联接表格的右侧。
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
条件匹配,否则JOIN将产生一个空结果集。一旦它产生非空结果集,它将更新正确的行。
在执行此更新之前,您可以测试它是否使用此查询选择了正确的行。
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值。