Sql запрос пользователя / подписчика - PullRequest
0 голосов
/ 22 января 2010

Я создаю таблицу, в которой отображаются все зарегистрированные пользователи, на которых текущий пользователь еще не подписан. Но как только он подписал кого-то, мне нужно отфильтровать этот список, чтобы исключить его.

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

|UserId||SubscriberID|

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

Вот что у меня есть:

 SELECT u.UserID, FullName, UserName from users u 
    LEFT JOIN subscribed t ON 
     ((u.UserName LIKE '%$search%' OR 
       u.Email LIKE '%$search%') AND 
      ({$_SESSION['ID']} = t.UserID 
        AND t.FollowerID != u.UserID)
     )

Я знаю, что последняя часть запроса неверна, поскольку я сравниваю только, если UserID и FollowerID не совпадают ни для одной конкретной строки, а не для всей таблицы.

1 Ответ

0 голосов
/ 22 января 2010

Чтобы найти список результатов в таблице A, которых нет в таблице B, у вас есть два варианта. Либо используйте синтаксис NOT IN, либо LEFT JOIN и посмотрите, где поле PK в таблице B равно NULL.

NOT IN пример:

SELECT a.id FROM a WHERE a.id NOT IN (SELECT b.id FROM b)

LEFT JOIN пример:

SELECT a.id FROM a LEFT JOIN b ON (a.id = b.id) WHERE (b.id IS NULL)

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