如何获得类似火种的匹配,其中每个用户在表中都有自己的条目

时间:2019-05-01 06:48:19

标签: mysql sql oracle tinder

我正在开发类似app的tinder,我想获取所有比赛。在我的比赛表中,每个用户都有它自己的条目。所以对于一个比赛,有两个用户,并且表中总共有两个条目。

我尝试了如下所示的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 个答案:

答案 0 :(得分:2)

通过对user_idfriend_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

答案 1 :(得分:0)

如果每对总是有两行,那么一个简单的解决方案是:

spark.sparkContext.getConf().getAll()

使用SELECT user_id, friend_id FROM matches WHERE is_match = 1 AND user_id < friend_id; (或SELECT DISTINCT)会使查询更加昂贵。