我有一个名为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)
我相信你想要这样:
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
值,那么将左联接
更改为内联接
。