我有一个运动队成绩的 MYSQL 表。每个事件或比赛都存储有对
和对
进球得分值。我想要做的是检索一个有序列表匹配按承认的目标顺序(升序)。
这看起来很简单,直到所讨论的球队是客队:
在这种情况下,我们正在考虑
for
的目标。当相关球队是主队时,我们将查看“对手”进球。
我可以编写以下查询:
(SELECT * FROM `matches`,`teams`,`outcomes`
WHERE `home_team_id`=11 AND `matches`.away_team_id=`teams`.team_id
AND `matches`.score_id=`outcomes`.outcome_id
ORDER BY `against`,`date` DESC LIMIT 0,20)
UNION
(SELECT * FROM `matches`,`teams`,`outcomes`
WHERE `away_team_id`=11 AND `matches`.home_team_id=`teams`.team_id
AND `matches`.score_id=`outcomes`.outcome_id
ORDER BY `for`,`date` DESC LIMIT 0,20)
它有效,但结果集分为两半,我想将结果和失球顺序合并起来,无论球队是主场还是客场。我需要别名才能执行此操作吗?
谢谢。
最佳答案
尝试使用您需要的字段进行 UNION 查询,重命名 for 或 against 字段,以便它们具有相同的名称。然后从此表联合中选择所有内容,并按重命名的字段进行排序:
select * from
((SELECT matches.*, teams.*, outcomes.against as goals
FROM matches,teams,outcomes
WHERE
matches.home_team_id=11
AND matches.away_team_id=teams.team_id
AND matches.score_id=outcomes.outcome_id
)
UNION
(SELECT matches.*, teams.*, outcomes.for as goals
FROM matches,teams,outcomes
WHERE matches.away_team_id=11
AND matches.home_team_id=teams.team_id
AND matches.score_id=outcomes.outcome_id
)) as union_table
order by goals, date desc limit 0,20;
该查询在 MySQL 数据库中完美执行。
关于mysql - SQL 连接和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16840150/