Php 只得到一个“结果”;“足球比赛”;每队每周

Php 只得到一个“结果”;“足球比赛”;每队每周,php,mysql,codeigniter,Php,Mysql,Codeigniter,我正在做一个新项目,我需要做的一件事就是得到一场假美式足球比赛的结果。我在php和mysql中这样做,使用CodeIgniter作为我的框架。我的小提琴如下: 现在,正如您所看到的,每个团队都有一个主客场团队id的条目。我想做的是让查询只为每个团队获得一个结果(无论他们是主客场)。如果不需要的话,我宁愿不以编程方式处理这些数据 结果应该是以下几点: SELECT week, home_team_id, away_team_id, my_score, their_score,

我正在做一个新项目,我需要做的一件事就是得到一场假美式足球比赛的结果。我在php和mysql中这样做,使用CodeIgniter作为我的框架。我的小提琴如下:

现在,正如您所看到的,每个团队都有一个主客场团队id的条目。我想做的是让查询只为每个团队获得一个结果(无论他们是主客场)。如果不需要的话,我宁愿不以编程方式处理这些数据

结果应该是以下几点:

SELECT week, home_team_id, away_team_id, 
    my_score, their_score, 
    a.team_name as home_team, b.team_name as away_team 
FROM nfl_user_matchups nm 
LEFT JOIN user_teams a ON nm.home_team_id = a.user_teams_id 
LEFT JOIN user_teams b ON nm.away_team_id = b.user_teams_id 
WHERE week = 1
预期的最终数据如下所示(我的得分为主场球队id得分,他们的得分为客场球队id得分):


您的问题陈述基本上意味着一对参赛的团队,即,
(1,2)
将被视为与
(2,1)
相同。处理此类要求的一种方法是确保这两支球队之间的任何比赛,我们都确保他们的顺序相同。因此,基本上我们从两个团队中获取团队id值,并始终将其放在第一个索引中;值始终位于第二个(最后一个)索引处。值得注意的是,
Max()
Max()
不同
Max()
函数计算列上的最大值;而
magest()
通常用于跨行比较值

现在,我们可以简单地对这一对进行分组,并根据需要计算聚合。在确定主客场得分时,您需要使用
CASE。。当
表达式用于确定特定行的主id最小还是远离id时:

SELECT 
  week, 
  LEAST(home_team_id, away_team_id) AS home_id, 
  GREATEST(home_team_id, away_team_id) AS away_id, 
  MAX(CASE 
      WHEN LEAST(home_team_id, away_team_id) = home_team_id 
      THEN my_score 
      ELSE their_score
      END) AS home_score,
  MAX(CASE 
      WHEN GREATEST(home_team_id, away_team_id) = away_team_id 
      THEN their_score 
      ELSE my_score
      END) AS away_score 
FROM nfl_user_matchups 
WHERE week = 1
GROUP BY
  week, 
  home_id, 
  away_id;

如何使用数据库和查询转换预期结果?@tcadidot0-您的意思是什么?如何转换预期结果?你在找一个最终数据的例子吗?哦,是的,我在想该用什么词,“翻译”一词刚刚出现在脑海中。我们能看看最终数据的例子吗?thanks@tcadidot0-添加到原始问题。那么最后5条记录是前5条记录的重复,但主队和客队的id是相反的?
SELECT 
  week, 
  LEAST(home_team_id, away_team_id) AS home_id, 
  GREATEST(home_team_id, away_team_id) AS away_id, 
  MAX(CASE 
      WHEN LEAST(home_team_id, away_team_id) = home_team_id 
      THEN my_score 
      ELSE their_score
      END) AS home_score,
  MAX(CASE 
      WHEN GREATEST(home_team_id, away_team_id) = away_team_id 
      THEN their_score 
      ELSE my_score
      END) AS away_score 
FROM nfl_user_matchups 
WHERE week = 1
GROUP BY
  week, 
  home_id, 
  away_id;