sql-запрос с двумя объединениями и простая логика

Найди скрипку 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') 

Solutions Collecting From Web of "sql-запрос с двумя объединениями и простая логика"

Измените свой запрос, как показано ниже. Если вам нужны только данные из первой таблицы, тогда нет необходимости присоединяться к запросу, используйте только внутренний запрос

 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