mysql - SQL 基于另一行更新行

标签 mysql wordpress

我有一个名为“wp_postmeta”的 wordpress 数据库表

看起来像这样(简化)

wp_postmeta

这是我想用英语做的事情,希望有人能帮我把它翻译成实际的 SQL 语句。

如果 meta_key(address) LIKE "%Portland%",将 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"

我在这里读到另一个关于使用临时表的问题,但这超出了我的工资等级。

最佳答案

啊哈,神秘而美妙的 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/

相关文章:

java - 如何通过 JavaFX 显示来自 MYSQL 的阿拉伯语查询搜索?

php - Android MySql 使用 php 创建图像并将其上传到服务器

MySQL multiple Inner Join 帮助 - 1064

php - WordPress:如何创建共享同一个数据库的两个博客?

php - 将字符串参数传递给 WP REST API

mysql - 检索每组中的最后一条记录 - MySQL

php - 多个左连接与总和

php - 如何在 Windows Azure 上部署现有的 WordPress 项目

php - 通过PHP在其他div之后插入div

php - 如何清理 WordPress 中的用户密码信息?