所以我有一些代码想弄清楚...我有两个表:
表:匹配
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_p1
和match_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/