Найди скрипку http://sqlfiddle.com/#!9/4a4aff/7
Таблица друзей
| id | user_id | Friend_id | status | 1 | 1 | 24 | P | 2 | 18 | 26 | P
Таблица пользователей
| ID | email | password | ..N | 1 | xx | xx | xx | 2 | xx | xx | xx
из этих таблиц я хочу, чтобы все пользователи были перечислены без пользователей, чей статус был P или B в таблице списка друзей, кажется, что это просто, используя соединения, но в WordPress этот код не работает, и запрос выглядит следующим образом.
select DISTINCT u.ID, u.user_nicename from wp_users u LEFT JOIN friends_list f ON f.friend_id=u.ID WHERE f.status NOT IN ('P', 'B')
Измените свой запрос, как показано ниже. Если вам нужны только данные из первой таблицы, тогда нет необходимости присоединяться к запросу, используйте только внутренний запрос
select DISTINCT u.ID, u.user_nicename from wp_users u WHERE u.ID not in (select f.friend_id from friends_list f where f.status IN ('P', 'B')) order by u.ID;
скрипка
РЕДАКТИРОВАТЬ
select DISTINCT u.ID, u.user_nicename from wp_users u LEFT JOIN friends_list f ON f.friend_id=u.ID WHERE f.status NOT IN ('P', 'B') OR f.status IS NULL ORDER BY u.ID
Вы должны объединить таблицы с идентификатором пользователя, как показано ниже:
LEFT JOIN friends_list f ON f.user_id = u.ID
select DISTINCT u.ID, u.user_nicename from wp_users u LEFT JOIN friends_list f ON f.user_id=u.ID WHERE f.status NOT IN ('P', 'B')
Добавьте две записи в таблицу friends_list с параметрами Q и Z для тестирования
INSERT INTO `friends_list` (`id`, `user_id`, `Friend_id`, `status`) VALUES (80, 1, 26, 'P'), (79, 18, 26, 'P'), (78, 1, 24, 'P'), (79, 20, 24, 'Q'), (80, 21, 24, 'Z');
Рабочий пример sqlfiddle
Из того, что я понимаю, вы хотите ВСЕ пользователя, кроме тех, у кого есть P или B как статус. Чтобы получить те пользователи, которые не имеют значения в таблице friends_list, вы можете добавить нулевой запрос в свой запрос.
select DISTINCT u.ID, u.user_nicename from wp_users u LEFT JOIN friends_list f ON f.friend_id=u.ID WHERE f.status NOT IN ('P', 'B') OR f.status IS NULL
Я также не уверен, что вы присоединяетесь к правой колонке? Должен ли пользователь user_id вместо friend_id?
Просто измените столбец привязки следующим образом:
select DISTINCT u.ID, u.user_nicename from wp_users u LEFT JOIN friends_list f ON f.user_id=u.ID WHERE f.status NOT IN ('P', 'B');
Вы можете использовать этот запрос, ваша скрипка показывает пустой результат, поскольку у вас есть только данные с P Status, попробуйте добавить еще одну запись с каким-то другим статусом, после чего вы получите результат.
select DISTINCT u.ID, u.user_nicename from wp_users u left join friends_list f on f.friend_id=u.ID where f.status is NULL