【发布时间】:2016-01-23 01:14:16
【问题描述】:
我有一个 WordPress 数据库,其中大约有 28000 个垃圾邮件用户注册,我需要在不删除任何实际客户的情况下隔离和删除它们。
我注意到所有垃圾邮件用户注册对于特定的meta_key
meta_value
有问题的元密钥是billing_first_name
因此,我正在尝试编写一个可以在 PHPmyAdmin 中执行的查询,该查询将返回 meta_key 具有空 meta_value 的所有用户 ID 的列表billing_first_name 这样我就可以从 _usermeta 表和 _users 表中删除所有这些用户。 p>
我在网上找到了一个有类似问题的用户:https://wordpress.org/support/topic/deleting-spam-user-accounts-from-site-with-woocommerce
他写了以下我试图在我的数据库上运行的查询:
SELECT * FROM wp_usermeta JOIN wp_users ON (wp_usermeta.user_id = wp_users.ID) WHERE user_id NOT IN (SELECT um1.user_id FROM wp_usermeta um1 WHERE um1.meta_key = 'shipping_first_name')
但是,它只返回 137 个结果,并且通过 28000+ plus 注册,但实际订单只有大约 1000 个,我在数据库中的帐户比 137 spam 多得多。
我已经尝试调整查询以扩展它并让它做我想做的事,但我并不是一个真正的“数据库”人,也没有太多运气。
我的尝试是:
SELECT * FROM wv5_usermeta JOIN wv5_users ON (wv5_usermeta.user_id = wv5_users.ID) WHERE user_id NOT IN (SELECT um1.user_id FROM wv5_usermeta um1 WHERE um1.meta_key = 'billing_first_name' AND um1.meta_value IS NOT NULL)
有人可以帮我制定一个我可以使用的有效查询吗?
请注意,我的尝试是基于我在网上找到的查询,我不知道这是否是正确的方法。
我的最终目标是找出所有从未下过订单的用户。未下订单的用户没有设置帐单地址或送货地址。因此,我正在尝试构建一个查询来选择具有空帐单地址或空送货地址的用户,然后将其删除。
非常感谢您提供的任何帮助。
编辑:
澄清一下,该网站用户是 WooCommerce,因此数据库中没有特定的订单表。诸如“billing_first_name”、“shipping_first_name”之类的元键只有在用户第一次下订单时才会填充一个值。因此,假设垃圾邮件用户永远不会下订单,因此这些 meta_keys 将为空。
【问题讨论】:
-
您的真实用户和垃圾邮件用户分别是多少?你能算一算吗?
-
一般元
billing_first_name与orders几乎没有任何关系。因此,您应该更好地考虑什么是真正的标准。在您的数据库中应该有一个名为orders的表,显示该表的架构。必须是简单的连接users和orders表 -
根据我的订单,我估计大约有 1000 个真实用户和 28500 个垃圾邮件用户。
-
@Alex 该网站使用 WooCommerce,并且没有特定的订单表。 billing_first_name 和类似 shipping_first_name 之类的 meta_keys 仅在客户第一次下订单时才会填充,因此假设所有垃圾邮件帐户从未下过订单,这意味着这将是空的。
-
AFAIK meta_keys 在表 post_meta 或类似的东西中。你应该更清楚地说明你在谈论 woocomerce
标签: mysql wordpress woocommerce