SQL для WP, чтобы удалить пользователей с несколькими мета-ключами и комментариями - PullRequest
0 голосов
/ 13 марта 2019

Мне нужна помощь в составлении 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 для этого?

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Попробуйте выполнить удаление с существующим предложением, утверждающим требование любого из двух ключей:

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 теперь обрабатывает задание, которое ранее обрабатывало исключающее соединение.

1 голос
/ 13 марта 2019

Вы можете использовать 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;

Вы не получите совпадений, только если все метакейсы отсутствуют, что, я думаю, именно то, о чем вы просите.

EDIT:

Вы, кажется, хотите:

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, если вы собираетесь проводить несколько сравнений с разными таблицами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...