提问者:小点点

每次变量出现在另一个表中时更新计数


我有一个名为staysafe的下表,其中包含以下列:

id电子邮件订单

id和电子邮件列已填充。

然后,我想查看Wordpress postmeta表,并计算电子邮件地址每次出现在meta_key中出现“_billing_email”的行中的时间,然后更新staysafe表中每个电子邮件地址出现的次数。

POST META表如下:

meta_id post_id meta_key meta_value

我正在使用下面的代码,但是一直在运行时出错(postmeta表很大!!),我哪里出错了?

update staysafe

set orders =
(select count(*) 
from wp_postmeta
where email = meta_value)

共2个答案

匿名用户

我相信你想要这样:

update staysafe s
set s.orders = (
  select count(*) 
  from wp_postmeta
  where meta_key = '_billing_email' and meta_value = s.email
)

这将更新表StaySafe的所有行。
如果要更新特定行,请添加WHERE子句:

where s.email = 'someemail@aaa.com'

匿名用户

您可以聚合和联接:

update staysafe s left join
       (select meta_value, count(*) as cnt
        from wp_postmeta
        where meta_key = '_billing_email'
        group by metavalue
       ) pm
       on s.email = pm.email
    set orders = coalesce(cnt, 0);

如果您不关心0值,那么将左联接更改为内联接