用于WP的SQL可以删除具有多个元键和注释的用户

问题描述 投票:0回答:2

我需要帮助组合一个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来做到这一点?

mysql sql wordpress phpmyadmin
2个回答
1
投票

你可以在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


1
投票

尝试使用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现在处理排除连接之前处理的工作。

© www.soinside.com 2019 - 2024. All rights reserved.