#mysql #sql #wordpress #phpmyadmin
#mysql #sql #wordpress #phpmyadmin
Вопрос:
Мне нужна помощь в составлении 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 для этого?
Ответ №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;
Вы не получите совпадений только в том случае, если отсутствуют все метакейсы, о чем, я думаю, вы и просите.
Редактировать:
Вы, кажется, хотите:
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. Кстати, @Gordon комментарии не являются пользовательской метой! итак, приведенный выше SQL выполняет это для метаключей 1 и 2, но как мы можем также проверить, разместил ли пользователь комментарий на сайте?
2. Итак, нам также нужно проверить в таблице wp_comments столбец comment_author_email, является ли значение пустым
3. @GuruSurfer . . . Исправьте ваш вопрос, чтобы ответить на то, как на самом деле выглядят данные.
4. мой вопрос четко указывает на то, что я пытаюсь удалить пользователей, у которых нет метаключей 1 и 2 и у которых нет комментариев. Я могу только придумать, как перефразировать, так что вот оно: SQL для проверки, нет ли у пользователя метафор usermeta metakey1 и metakey2 и кто не оставлял комментарии в wp_comments, надеюсь, это более понятно, и большое спасибо за поддержку здесь 🙂
Ответ №2:
Попробуйте выполнить удаление с предложением 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
теперь обрабатывает задание, которое ранее обрабатывало соединение исключения.
Комментарии:
1. @Strawberry Ты издеваешься надо мной? У меня было только два снимка Auchentosen, но… Я имею в виду, давай сюда…
2. Facepalm. Что меня сбило с толку, так это то, что столбец исключения также был тем, что появилось в объединении. В любом случае, я не думаю, что мой ответ должен меняться из-за этого.