как получить соответствие, как трут, где каждый пользователь имеет свою запись в таблице - PullRequest
0 голосов
/ 01 мая 2019

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

Я попробовал SQL-запрос, как указано ниже select user_id, friend_id from matches where is_match = 1 group by user_id,friend_id

с запросом я получаю результат ниже `

|--------------------------| 
|user_id|friend_id|is_match|
|--------------------------|
|   23  |    24   |    1   |
|--------------------------|
|   24  |    23   |    1   |
|--------------------------|
|   24  |    25   |    1   |
|--------------------------|
|   25  |    24   |    1   |
|--------------------------|
|   25  |    26   |    1   |
|--------------------------|
|   26   |   25   |    1   |
---------------------------

`

Я хочу такой результат.

`

|--------------------------|
|user_id|friend_id|is_match|
|--------------------------|
|   23  |    24   |    1   |
|--------------------------|
|   24  |    25   |    1   |
|--------------------------|
|   25  |    26   |    1   |
|--------------------------|

`

Ответы [ 2 ]

2 голосов
/ 01 мая 2019

Вы можете получить нужные результаты, отсортировав значения user_id и friend_id, а затем выбрав только пары DISTINCT. Примечание: GROUP_BY не требуется.

SELECT DISTINCT LEAST(user_id, friend_id) AS user1, GREATEST(user_id, friend_id) AS user2
FROM matches
WHERE is_match = 1
0 голосов
/ 01 мая 2019

Если у вас всегда есть две строки для каждой пары, тогда простое решение:

SELECT user_id, friend_id
FROM matches
WHERE is_match = 1 AND
      user_id < friend_id;

Использование SELECT DISTINCT (или GROUP BY) делает запрос намного дороже.

...