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

时间:2019-03-13 13:14:32

标签: mysql sql wordpress phpmyadmin

我需要帮助来整理一个SQL,该SQL可以删除没有(metakey1或metakey2)和(没有注释)的用户

我有这个SQL可以对单个meta_key进行操作

urlExists(){
     this.url = this.router.url
     if(this.url == "/"){
         return false;
     }else{
         return true;
     }
 }

我该如何扩展上述SQL?

2 个答案:

答案 0 :(得分: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;

仅当 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

答案 1 :(得分:1)

尝试使用存在子句进行删除,声明存在两个键之一的要求:

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现在可以处理排除联接先前处理的工作。