如何像火种一样获得匹配,每个用户在 table 中都有自己的条目
how to get match like tinder where every user has its own entry in table
我正在开发像应用程序这样的火种,我想获取所有 match.In 我的匹配项 table 每个用户都有自己的 entry.so 对于一个匹配项有两个用户并且有table.
中共有两个条目
我尝试了 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 |
|--------------------------|
`
您可以通过对 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
如果每对总是有两行,那么一个简单的解决方案是:
SELECT user_id, friend_id
FROM matches
WHERE is_match = 1 AND
user_id < friend_id;
使用 SELECT DISTINCT
(或 GROUP BY
)会使查询成本更高。
我正在开发像应用程序这样的火种,我想获取所有 match.In 我的匹配项 table 每个用户都有自己的 entry.so 对于一个匹配项有两个用户并且有table.
中共有两个条目我尝试了 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 |
|--------------------------|
`
您可以通过对 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
如果每对总是有两行,那么一个简单的解决方案是:
SELECT user_id, friend_id
FROM matches
WHERE is_match = 1 AND
user_id < friend_id;
使用 SELECT DISTINCT
(或 GROUP BY
)会使查询成本更高。