mysql - 更新自定义帖子类型元值的 WordPress SQL(超过 6 个月)

标签 mysql wordpress custom-post-type

我有一个自定义帖子类型(艺术品)。除了更新另一个之外,我还需要更新所有超过 6 个月的(艺术品),其 meta_key(状态)和 meta_value 为(可用)并更改为(不可用)该过程中有两个 meta_key 值。

因此,对于第一部分,我可以使用以下内容返回所有超过 6 个月的“可用”“艺术品”;

SELECT * FROM `wp207_posts` wp
INNER JOIN `wp207_postmeta` wm ON (wm.`post_id` = wp.`ID` AND wm.`meta_key`='status' AND wm.`meta_value`='available')
AND DATEDIFF(NOW(), `post_date`) > 182

有了这些,我需要更新以下meta_key值;

  1. 将“状态”从“可用”更新为“不可用”
  2. 更新“价格”以删除该值(即删除价格值(如果存在))
  3. 更新“price_range”以删除该值(即删除 Price_range 值(如果存在))

以下 SQL 允许我将“状态”从“可用”更新为“不可用”

UPDATE `wp207_posts` wp
INNER JOIN `wp207_postmeta` wm ON (wm.`post_id` = wp.`ID` AND wm.`meta_key`='status' AND wm.`meta_value`='available')
AND DATEDIFF(NOW(), `post_date`) > 182
SET `meta_value`=replace(meta_value, '0', '1')
WHERE `meta_key`='status';

如何使用相同的查询(超过 6 个月的艺术品)删除 meta_key 的值(参见上面的 2 和 3)?例如,如果我想删除所有超过 6 个月的艺术品的价格,这是否是最好的方法?

UPDATE `wp207_posts` wp
INNER JOIN `wp207_postmeta` wm ON (wm.`post_id` = wp.`ID` AND wm.`meta_key`='status' AND wm.`meta_value`='1')
AND DATEDIFF(NOW(), `post_date`) > 182
SET `meta_value`=''
WHERE `meta_key`='price';

我可以确认这篇文章中的所有 UPDATE 脚本都做了我需要它们做的事情 - 尽管怀疑有更好的方法。

<小时/>

最终 SQL

UPDATE wp207_postmeta wm 
JOIN wp207_posts wp ON wm.post_id = wp.ID 
SET wm.meta_value='not available' 
WHERE
    wm.meta_key='status' AND
    wm.meta_value='available' AND
    post_type='artwork' AND
    DATEDIFF(NOW(), wp.post_date) > 182;

UPDATE wp207_postmeta
WHERE 
    wp207_postmeta.meta_key IN ('price', 'price_range') AND 
    wp207_postmeta.post_id IN (SELECT ID FROM wp207_posts wp WHERE 
    post_type='artwork' AND
    DATEDIFF(NOW(), wp.post_date) > 182);

谢谢。

最佳答案

试试这个

UPDATE wp207_postmeta wm 
JOIN wp207_posts wp ON wm.post_id = wp.ID 
SET wm.meta_value='not available' 
WHERE 
    wm.meta_key='status' AND
    wm.meta_value='available' AND
    DATEDIFF(NOW(), wp.post_date) > 182;


DELETE FROM wp207_postmeta
WHERE 
    wp207_postmeta.meta_key IN ('price', 'price_range') AND 
    wp207_postmeta.post_id IN (SELECT ID FROM wp207_posts wp WHERE 
     DATEDIFF(NOW(), wp.post_date) > 182);

关于mysql - 更新自定义帖子类型元值的 WordPress SQL(超过 6 个月),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26303948/

相关文章:

mysql - 插入到从删除中选择

php - 如何保持收集的数据库行的顺序与传递给 where 子句的数组相同

php - 自定义帖子类型的WordPress页面父级

php - WordPress 两种 custom_post_type 一种分类法

php - 根据时间DESC连接两张表

Java CallableStatement registerOutParameter,它有什么作用?

javascript - 在 WordPress 中提交后清除表单字段

wordpress - 无法登录wordpress

php - Wordpress 暂存环境

php - Wordpress,通过名称或 URL 获取帖子内容