MySQL выбрать подходящие результаты - PullRequest
1 голос
/ 21 марта 2012

Я пытаюсь найти лигу (крышку), где два пользователя находятся отдельно.

Вот мои таблицы:

Таблица лиг:

*id*    lname
--------------
 1      Hard C
 3      Fun
 5      Crazy

Таблица совпадений:

*userid*   *lid* 
-----------------
   1         1
   4         5
   1         3
   2         1
   4         1
   4         3

* являются первичными ключами

match.lid - это внешний ключ для leagues.id (пользователь не может дважды входить в одну и ту же лигу)

Вот что у меня есть (начало):

SELECT t1.lid, t2.lname 
FROM match t1
JOIN leagues t2 on t1.lid = t2.id

Пока мне удалось объединить две таблицы и получить имена. Моя конечная цель - показать lid, где два пользователя входят в одну лигу, скажем userid 1 и 4.

userid 1 является членом lid 1 и 3

userid 4 является членом lid 5, 1 и 3

Оба пользователя встречаются в лиге (lid) 1 и 3

Так что мне нужен запрос, который показывает только лигу, где встречаются оба пользователя. Как это:

lid    lname
--------------
 1      Hard C
 3      Fun

Поскольку userid 1 и 4 встречаются в лиге 1 и 3, результаты должны показать это. Я могу выполнить два запроса для каждого пользователя и проверить, какие лиги встречают оба пользователя через php, но я думаю, что более эффективно выполнить один запрос.

Ответы [ 2 ]

0 голосов
/ 21 марта 2012
SELECT m1.lid, l.lname FROM 
`match` m1, `match` m2, leagues l
WHERE m1.lid = m2.lid AND m1.lid = l.id 
  AND m1.userid = 1 
  AND m2.userid = 4
0 голосов
/ 21 марта 2012

Есть несколько способов.Самый простой способ:

SELECT id AS lid,
       lname
  FROM leagues
 WHERE id IN
        ( SELECT lid
            FROM match
           WHERE userid = 1
        )
 AND id IN
        ( SELECT lid
            FROM match
           WHERE userid = 4
        )
;

Другой способ, который немного менее прямой, но может работать лучше - вы можете попробовать и посмотреть - это использовать JOIN:

SELECT id AS lid,
       lname
  FROM leagues
  JOIN match AS match1
    ON match1.lid = leagues.id
   AND match1.userid = 1
  JOIN match AS match2
    ON match2.lid = leagues.id
   AND match2.userid = 4
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...