我有一个名为“wp_postmeta”的 wordpress 数据库表
看起来像这样(简化)
这是我想用英语做的事情,希望有人能帮我把它翻译成实际的 SQL 语句。
如果 meta_key(address) LIKE "%Portland%",将 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"
我在这里读到另一个关于使用临时表的问题,但这超出了我的工资等级。
最佳答案
啊哈,神秘而美妙的 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 值。
关于mysql - SQL 基于另一行更新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28685322/