SQL for WP 删除具有多个元键和评论的用户
Posted
技术标签:
【中文标题】SQL for WP 删除具有多个元键和评论的用户【英文标题】:SQL for WP to delete users with multiple meta keys and comments 【发布时间】:2019-08-04 04:22:05 【问题描述】:如果用户没有(metakey1 或 metakey2)和(没有 cmets),我需要帮助组合一个可以删除用户的 SQL
我有这个为单个 meta_key 做的 SQL
SELECT *
FROM wp_users LEFT JOIN wp_usermeta
ON wp_users.ID = wp_usermeta.user_id
AND wp_usermeta.meta_key = 'metakey1'
WHERE wp_usermeta.user_id IS NULL
如何扩展上述 SQL 来做到这一点?
【问题讨论】:
【参考方案1】:您可以在on
子句中使用in
:
SELECT u.*
FROM wp_users u LEFT JOIN
wp_usermeta um
ON u.ID = um.user_id AND
um.meta_key IN ('metakey1', 'metakey2', 'comments')
WHERE um.user_id IS NULL;
只有当 all 元键丢失时,你才会得到匹配项,我认为这就是你所要求的。
编辑:
你似乎想要:
SELECT u.*
FROM wp_users u
WHERE NOT EXISTS (SELECT 1
FROM wp_usermeta um
WHERE u.ID = um.user_id AND
um.meta_key IN ('metakey1', 'metakey2')
) AND
NOT EXISTS (SELECT 1
FROM wp_comments c
WHERE u.ID = c.user_id
);
如果您要对不同的表进行多次比较,我更喜欢NOT EXISTS
。
【讨论】:
实际上@Gordon cmets 不是用户元!所以上面的 SQL 是为元键 1 和 2 做的,但是我们如何才能检查用户是否在网站上发表了评论? 所以我们还需要检查 wp_cmets 表中的 comment_author_email 列是否为空 @GuruSurfer 。 . .修正您的问题以解决数据的实际情况。 我的问题明确指出我正在尝试删除没有元键 1 和 2 且没有 cmets 的用户。我只能想办法解释一下,所以这里是:一个 SQL 来检查用户是否没有 usermeta metakey1 和 metakey2 以及谁没有在 wp_cmets 中发布 cmets 希望这更清楚,非常感谢这里的支持 :) 【参考方案2】:尝试使用声明两个键之一的存在子句进行删除:
DELETE
FROM wp_users wp1
WHERE NOT EXISTS (SELECT 1 FROM wp_usermeta wp2
WHERE wp1.ID = wp2.user_id AND
wp2.meta_key IN ('metakey1', 'metakey2'));
请注意,我在上面编写的查询版本中不再需要以下 where 子句:
WHERE wp_usermeta.user_id IS NULL
不再需要它,因为 NOT EXISTS
现在处理排除连接之前处理的作业。
【讨论】:
@Strawberry 你在开玩笑吗?我确实只拍了两张 Auchentosen,但是...我的意思是来这里... 面部护理。让我失望的是,排除列也是加入中出现的内容。无论如何,我认为我的答案不需要因此而改变。以上是关于SQL for WP 删除具有多个元键和评论的用户的主要内容,如果未能解决你的问题,请参考以下文章
使用 wp_list_comments() 在 wordpress 中使用元键过滤评论