Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询的细化_Mysql_Search - Fatal编程技术网

MySQL查询的细化

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

我使用下面的查询为一个团队提供一组最近20场比赛。我想查找他们在过去20场比赛中的进球数,并按(进球数,日期)排序结果:

问题在于:

  • 如果我们正在寻找的球队是主队,我们需要计算“进球数”
  • 如果球队在客场,我们需要计算“进球数”来找出他们的进球数
所以我需要做的是:

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