用于WP的SQL可以删除具有多个元键和注释的用户
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于WP的SQL可以删除具有多个元键和注释的用户相关的知识,希望对你有一定的参考价值。
我需要帮助组合一个SQL,如果他们没有(metakey1或metakey2)和(没有评论)可以删除用户
我有这个SQL,它为单个meta_key
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来做到这一点?
答案
你可以在in
子句中使用on
:
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;
只有当缺少所有的metakey时才会得到匹配,我认为这就是你所要求的。
编辑:
你似乎想要:
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
。
另一答案
尝试使用exists子句进行删除,声明需要两个键中的任何一个:
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
现在处理排除连接之前处理的工作。
以上是关于用于WP的SQL可以删除具有多个元键和注释的用户的主要内容,如果未能解决你的问题,请参考以下文章
使用 wp_list_comments() 在 wordpress 中使用元键过滤评论
具有多个 postmeta 左连接的 Wordpress 自定义 SQL 查询