需要一个SQL查询来用META_KEY=‘_PRICE’中值更新META_KEY=‘_PRICE’

时间:2017-01-23 作者:RobBenz

我不知道有多少产品是这样的,但我知道有很多。

在db中;

这个_regular_price 岗位价值(wc产品)高于_price 价值我不知道这是如何或何时发生的,但前端正在显示_price - 两者中较低的一个。(这很糟糕,我们正在亏损)

我正在尝试运行一个查询,以查找所有这些post_id以便我可以更新它们。我想更新_price 价值为_regular_price

起初我试过这个;

SELECT post_id 
FROM wp_postmeta 
WHERE meta_key=\'_regular_price\' > meta_key=\'_price\' 
这将返回一个非常长的post_id 许多重复项,但并不总是一个产品。

然后,我尝试改编stackexchange的不同答案,我想到了这个

SELECT post_id, 
       post_title
FROM wp_posts 
   INNER JOIN wp_postmeta 
       ON post_id = post_id
WHERE post_type = \'product\'
   AND meta_key=\'_regular_price\' > meta_key=\'_price\'
但我并不完全理解inner join 此查询也不会返回所需的结果。

我想我需要join wp\\U帖子(&U);这里的wp\\U Posteta是因为post_type=\'product\' 将从wp_posts &;meta_key=\'_regular_price\' > meta_key=\'_price\' 将从wp_postmeta

会是这样吗meta_key=\'_regular_price\' 是否不返回整数?

我的下一个想法是将这些值与函数进行比较,然后根据需要进行更新;

//functions.php
add_action( \'after_theme_setup\', \'benz_update_wc_meta\' );
function benz_update_wc_meta() {
  global $woocommerce, $post;
  $reg_price = get_post_meta( get_the_ID(), \'_regular_price\', true );
  $basic_price = get_post_meta( get_the_ID(), \'_price\', true );
  if ( $reg_price > $basic_price ) {
    update_post_meta( get_the_ID(), \'_price\', $reg_price );
  }
}
或者诸如此类的事情,但也没有运气。

如果你有什么建议,请告诉我。谢谢

我也试过回应

$reg_price = get_post_meta( get_the_ID(), \'_regular_price\', true );
在主题模板woocommerce文件中,这将显示正确的价格,但当您将产品添加到购物车时,仍然使用错误的价格。

1 个回复
最合适的回答,由SO网友:Trent 整理而成

查询没有返回任何有效结果的原因是,您没有比较两个meta\\u键的meta\\u值,而是比较meta\\u键=“x”和meta\\u键=“y”的非数字结果。

SELECT post_id, 
       post_title
FROM wp_posts 
   INNER JOIN wp_postmeta 
       ON post_id = post_id
WHERE post_type = \'product\'
   AND meta_key=\'_regular_price\' > meta_key=\'_price\'
您要做的是比较这两个键的meta\\u值。

SELECT
  price.post_id,
  r_price,
  p_price
FROM
  (
    SELECT
      post_id,
      CAST(meta_value as SIGNED INTEGER) r_price
    FROM
      wp_postmeta
    WHERE
      meta_key = \'_regular_price\'
  ) regular_price,
  (
    SELECT
      post_id,
      CAST(meta_value as SIGNED INTEGER) p_price
    FROM
      wp_postmeta
    WHERE
      meta_key = \'_price\'
  ) price
WHERE
  price.post_id = regular_price.post_id
  and r_price > p_price
这将为您提供您正在查找的ID。最好是遍历结果集并更新post meta。

相关推荐

如何将WordPress配置为与Microsoft SQL Server数据库对话?

我们正在我们的intranet站点上构建WordPress站点,并希望将其连接到Microsoft SQL Server。我已经在IIS上下载并配置了PHP和PHP管理器。我还从键入此线程标题时弹出的已回答问题列表中下载了SQL Server DLL。我按照指示在PHP文件夹中下载了这些DLL。当我启动服务器地址以安装WordPress时,系统会提示我提供SQL DB名称、用户名、密码和DB主机名。我还下载了wp-db抽象插件,将wp-db抽象化。php文件放入WordPress文件保存的文件夹中,按照我