【问题标题】:Update Meta Value for WordPress posts with SQL使用 SQL 更新 WordPress 帖子的元值
【发布时间】:2016-07-22 18:35:22
【问题描述】:

我正在尝试更新 WordPress 数据库中符合特定条件的所有帖子的元值。

我创建了一个名为update_with_false 的表,其中每一行“值”与wp_posts 表中帖子的post_name 匹配。

我需要做的是将meta_key“included_in_related_articles”的meta_value 更改为“true”,以便wp_posts 表中的每个帖子与update_with_false 表中的行具有相同的帖子名称。

这是我现在的 SQL,但出现语法错误:

UPDATE SET wp_postmeta (post_id, meta_key, meta_value)
select ID, 'included_in_related_articles', 'true' from wp_posts
WHERE update_with_false.value = wp_posts.post_name

希望这是有道理的。我附上了一些我需要更新的元字段和我创建的额外表的屏幕截图

谢谢!

【问题讨论】:

    标签: mysql sql wordpress phpmyadmin


    【解决方案1】:

    如果我理解正确,如果找到 wp_posts.post_name 中的值,您想更新 wp_postmeta.meta_value 并将其设置为 trueupdate_with_false.value.

    您可以先将 wp_posts.post_name 列加入 wp_postmeta 表,然后通过进一步加入 update_with_false 表来限制加入的帖子.

    我在脑海中写下这个(在这个帮助下 ER diagram):

    update wp_postmeta pm
      inner join wp_posts p on p.id = pm.post_id
        inner join update_with_false x on x.value = p.post_name
    set pm.meta_value = 'true'
    where pm.meta_key = 'included_in_related_articles'
    

    【讨论】:

    • 感谢您的帮助,但我需要它只更新带有“included_in_related_articles”元键的帖子。不适用于所有帖子。
    • 查看更新版本。我添加了“meta_key”条件。
    • 感谢您的更新,这似乎有效,但仅适用于 300 篇文章中的 100 篇。我认为这可能是我的服务器上发生的事情,以防止处理全部金额,所以我会标记这是正确的。
    【解决方案2】:

    可以使用子查询来完成,如下所示:

    UPDATE `wp_postmeta` SET `meta_value`= 'true' WHERE meta_key = 'included_in_related_articles' AND `post_id` IN (SELECT ID FROM wp_posts AS wps LEFT JOIN update_with_false AS uwf on (wps.post_name = uwf.value) )
    

    SELECT ID FROM wp_posts AS wps LEFT JOIN update_with_false AS uwf on (wps.post_name = uwf.value) 是子查询,将从 wp_posts 表中给出逗号分隔的 ID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-30
      • 2013-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 2013-12-03
      • 2014-01-29
      相关资源
      最近更新 更多