MySQL查询的细化
我使用下面的查询为一个团队提供一组最近20场比赛。我想查找他们在过去20场比赛中的进球数,并按(进球数,日期)排序结果: 问题在于:MySQL查询的细化,mysql,search,Mysql,Search,我使用下面的查询为一个团队提供一组最近20场比赛。我想查找他们在过去20场比赛中的进球数,并按(进球数,日期)排序结果: 问题在于: 如果我们正在寻找的球队是主队,我们需要计算“进球数” 如果球队在客场,我们需要计算“进球数”来找出他们的进球数 所以我需要做的是: if (`home_team_id`=7 AND `matches`.away_team_id = `teams`.team_id) SELECT *, `for` AS `goalsF` , `against` AS `go
- 如果我们正在寻找的球队是主队,我们需要计算“进球数”李>
- 如果球队在客场,我们需要计算“进球数”来找出他们的进球数
if (`home_team_id`=7 AND `matches`.away_team_id = `teams`.team_id)
SELECT *, `for` AS `goalsF` , `against` AS `goalsA`
if (`away_team_id`=7 AND `matches`.home_team_id = `teams`.team_id)
SELECT *, `against` AS `goalsF` , `for` AS `goalsA`
但是,这必须在子集合或结果上形成。我不确定这是否可能,但这超出了我对MYSQL的了解
任何帮助都将不胜感激
Alan.首先,您确实需要学习ANSI标准的
join
语法,在该语法中,您将join
条件放在on
子句中,而不是放在from
子句中。此外,别名可能会使查询更具可读性
以下是您想要的逻辑,但不包括团队名称:
SELECT *
FROM (SELECT *,
(case when m.home_team_id = 7 then o.against end) as `goalsF` ,
(case when m.away_team_id = 7 then o.`for` end) as `goalsA`
FROM `matches` m join
`outcomes` o
on m.score_id = o.outcome_id
WHERE m.home_team_id = 7 or m.away_team_id = 7
ORDER BY `date` DESC
LIMIT 0 , 20
) res
ORDER BY `goalsF`
要获得球队名称,您应该两次加入球队
表,一次加入主队,一次加入客队。您可以在子查询中或之后执行此操作。另外,最好明确说明您选择的列,并在每个列引用中包含一个表别名:
SELECT *
FROM (SELECT m.*, o.*,
homet.team_name as hometeam_name, awayt.team_name as away_team_name,
(case when m.home_team_id = 7 then o.against end) as `goalsF` ,
(case when m.away_team_id = 7 then o.`for` end) as `goalsA`
FROM `matches` m join
`outcomes` o
on m.score_id = o.outcome_id join
teams homet
on homet.team_id = m.home_team_id join
teams awayt
on awayt.team_id = m.away_team_id
WHERE m.home_team_id = 7 or m.away_team_id = 7
ORDER BY `date` DESC
LIMIT 0 , 20
) res
ORDER BY `goalsF`
编辑:
要为第7团队实现目标,您可以使用:
(case when m.home_team_id = 7 then o.`for`
when m.away_team_id = 7 then o.against
end) as goals
要为其他团队实现目标,请执行以下操作:
(case when m.home_team_id = 7 then o.against
when m.away_team_id = 7 then o.`for`
end) as goals
编辑二:
要获得“其他”团队名称,逻辑类似。将选择中的团队名称引用替换为:
(case when m.home_team_id = 7 then awayt.team_name
when m.away_team_id = 7 then homet.team_name
end) as goals
你熟悉吗。你能发布你的表格结构吗?我不知道sqlfiddle-谢谢你的提醒戈登,谢谢你,谢谢你。我已经玩了一天了。我将仔细检查您的每一行问题,以便遵循您的解决方案。我真的很感谢你的意见,谢谢!有些地方不太对劲。我的成绩集中有两个新的栏目——GoalsF和GoalsA。有没有可能只得到GoalsF,根据球队是主场还是客场列出目标?我想是这样的:当m.home\u team\u id=7,那么o.对
其他o.对
END@gordon-linnoff获取团队名称的scond查询返回一个错误:“on子句”中的未知列“homet”I think it.s missing表别名后的列字段
(case when m.home_team_id = 7 then awayt.team_name
when m.away_team_id = 7 then homet.team_name
end) as goals