mysql - 在 MySQL 查询中获取两个匹配项?

标签 mysql sql

所以我有一些代码想弄清楚...我有两个表:

表:匹配

event_id
match_id (primary)
match_score
match_p1
match_p2
match_win

表:结果

event_id
user_id
result_id (primary)
result_name
result_extra

数据的奇怪之处在于匹配表的内容实际上以多种方式链接到结果表。

match_p1match_p2 中将有一个整数链接到结果表中的results_extra 字段。这是设计的,因为每场比赛都有两名选手(p1 和 p2),并且每个选手在每个事件中都有一个结果。

如果我想获得一个事件中所有匹配项的列表,我会执行以下操作:

SELECT *
FROM matches
WHERE event_id = 324

如果我想获得属于单个玩家的所有比赛的列表,我会这样做:

SELECT matches.*
FROM matches
    LEFT JOIN results
        ON ((results.result_extra = matches.match_p1) OR
            (results.result_extra = matches.match_p2))
WHERE results.user_id = 1566

但是,这就是事情变得有点复杂的地方......如果我想获得玩家 1566 与玩家 2058 的比赛列表怎么办?我无法弄清楚此查询的逻辑。你们能帮帮我吗?

最佳答案

这是一种方法。连接 results 两次,并匹配 2 个玩家组合。

select a.*
from matches a
join results b on a.match_p1 = b.result_extra
join results c on a.match_p2 = c.result_extra
where (b.user_id = 1566 and c.user_id = 2058) or (b.user_id = 2058 and c.user_id = 1566)

关于mysql - 在 MySQL 查询中获取两个匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38043255/

相关文章:

sql - 使用 Entity Framework == EntityException 并发访问数据库

mysql - 将 WHERE 子句中的 SUBQUERY 更改为 NORMAL JOIN

php - 图片上传表单无法在网络上使用

MySQL 查询取决于列值定义 where 语句

Mysql 复合主键无法正常工作

mysql - 表列转行mysql查询

sql - 展平相交的时间跨度

mysql - MySQL 中聚合值的 row_number() 函数

mysql - 获取我的查询的多个结果

php - 将数据库中的坐标绘制到谷歌地图中,​​不断检查新值