kla*_*sen 5 mysql database data-structures
我正在构建类似于Tinder的功能.人们可以"喜欢"或"跳过"其他人的照片,如果两个人彼此"喜欢"那么就会有匹配.
此功能的数据库结构的最佳方法是什么?我希望能够获得所有比赛的列表以及每个人的所有比赛.
方法1:
Person | JudgedPerson | Like
------ | ------------ | ----
1 | 2 | yes
2 | 1 | yes
1 | 3 | yes
3 | 1 | no
2 | 3 | yes
Run Code Online (Sandbox Code Playgroud)
这看起来像是一种逻辑方法,但很难创建MySql查询来发现匹配.或者有一种简单的方法可以发现它吗?
方法2
Person1 | Person2 | P1LikesP2 | P2LikesP1
------- | ------- | --------- | ---------
1 | 2 | yes | yes
1 | 3 | yes | no
2 | 3 | yes | null
Run Code Online (Sandbox Code Playgroud)
创建查询以获得匹配很容易,但数据模型可能不是最好的.
什么是最好的方法?如果方法1是最好的方法,我可以用什么mysql查询来发现匹配?
我没有正式理由为什么我更喜欢第一个选项,但很明显第二个选项没有完全规范化.
要查询第一个表并查找彼此喜欢的人对,您可以尝试以下自联接:
SELECT DISTINCT LEAST(t1.Person, t1.JudgedPerson) AS Person1,
GREATEST(t1.Person, t1.JudgedPerson) AS Person2
FROM yourTable t1
INNER JOIN yourTable t2
ON t1.JudgedPerson = t2.Person AND
t1.Person = t2.JudgedPerson
WHERE t1.Like = 'yes' AND
t2.Like = 'yes'
Run Code Online (Sandbox Code Playgroud)
注意:我DISTINCT和LEAST/ 一起添加GREATEST了SELECT条款,因为每个匹配实际上都是以副本的形式出现的.这样做的原因是,例如,1 -> 2, 2 -> 1将是一个匹配记录,但也2 -> 1, 1 -> 2将是第二个记录.
| 归档时间: |
|
| 查看次数: |
3005 次 |
| 最近记录: |