MySQL if оператор для 2 таблиц - PullRequest
0 голосов
/ 26 февраля 2012

Мне приходится иметь дело с уже разработанной системой, где у нас есть пользователи, которые настроены на пользователей таблиц mysql. Существует вторая таблица с именем users_preferences. В этой таблице хранятся настройки конфиденциальности пользователя. Все в порядке, за исключением того, что нет необходимости иметь запись для каждого пользователя. Если нет записи, я должен предположить, что пользователь является публичным. Вот в чем проблема - я пытаюсь искать в таблице пользователей, основываясь на таблице users_preferences. То, что у меня пока есть:

SELECT users.id AS id, users.username AS username, users.avatar AS avatar,  IF(users_preferences.privacyControls is null OR users_preferences.privacy = 0), 0, 1) AS userPrivacy 
FROM users, users_preferences 
WHERE users_preferences.userid = users.id AND userPrivacy = 0 AND users.username LIKE '%demo_user%'

Этот запрос недопустим и выдает ошибку, но он даст вам основную идею, что я хочу сделать - я хочу выбрать тех пользователей, которые установили users_preferences.privacy = 0 (ИЛИ такой записи нет). Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2012

попробуйте это:

SELECT  a.ID, a.username, a.avatar
FROM Users a LEFT JOIN Users_Preferences b ON
        a.ID = b.userID
WHERE   (b.userPrivacy = 0 OR b.userID IS NULL) AND
        a.Username LIKE '%demo_user%'

Теперь вы можете опустить userPrivacy, поскольку вы фильтруете userPrivacy в 0. Уже понятно, что приведенный выше результат - все публичные пользователи. Или вы можете сделать это так.

SELECT  a.ID, a.username, a.avatar, 'PUBLIC USER' as userPrivacy
FROM Users a LEFT JOIN Users_Preferences b ON
        a.ID = b.userID
WHERE   (b.userPrivacy = 0 OR b.userID IS NULL) AND
        a.Username LIKE '%demo_user%'
0 голосов
/ 26 февраля 2012
SELECT
  users.id AS id,
  users.username AS username,
  users.avatar AS avatar,
  IFNULL(users_preferences.privacyControls, 0) AS userPrivacy
FROM
  users
  LEFT JOIN users_preferences ON users_preferences.userid = users.id
WHERE
  IFNULL(users_preferences.privacyControls, 0) = 0
  AND users.username LIKE '%demo_user%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...