как добавить определенные ячейки в таблицу mysql

У меня есть следующая таблица mysql

 --------------------------------------------------------
|id  |   hometeam   |goalsfor|goalsagainst|   awayteam   |
 --------------------------------------------------------
| 1  |Inter Milan   |   3    |     1      | FC Barcelona |
 --------------------------------------------------------
| 2  |FC Barcelona  |   1    |     0      | Inter Milan  |
 --------------------------------------------------------
| 3  |Inter Milan   |   4    |     0      | AC Milan     |
 --------------------------------------------------------
| 4  |AC Milan      |   0    |     2      | Inter Milan  |
 --------------------------------------------------------
| 5  |Real Madrid   |   2    |     0      | AC Milan     |
 --------------------------------------------------------
| 6  |AC Milan      |   2    |     2      | Real Madrid  |
 --------------------------------------------------------
| 7  |FC Barcelona  |   2    |     2      | AC Milan     |
 --------------------------------------------------------
| 8  |Real Madrid   |   2    |     0      | Inter Milan  |
 --------------------------------------------------------
| 9  |Inter Milan   |   3    |     1      | Real Madrid  |
 --------------------------------------------------------
| 10 |FC Barcelona  |   2    |     0      | Real Madrid  |
 --------------------------------------------------------
| 11 |Real Madrid   |   1    |     1      | FC Barcelona |
 --------------------------------------------------------

Скажем, я хочу сложить все голы, которые Интер забил как в домашних, так и в выездных играх - глядя на таблицу, результат должен быть «12», однако из моего кода я получаю 17,

    $query = "SELECT hometeam, SUM(goalsfor), SUM(goalsagainst) FROM fixtures WHERE hometeam='Inter Milan' OR awayteam='Inter Milan'"; 

$result = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_array($result)){
    $name = $row['hometeam'];
    $f = $row['SUM(goalsfor)'];
    $a = $row['SUM(goalsagainst)'];}
    echo $name; echo $f+$a;

    ?>

Каким будет правильный метод, чтобы он давал мне конкретный результат, например, если WHERE hometeam='FC Barcelona' я хотел бы, чтобы он отображал результат как «7» и так далее для других команд.


person Aasim Azam    schedule 02.11.2011    source источник


Ответы (2)


вы также можете сделать что-то вроде этого:

SELECT 'Inter Milan', SUM(CASE 
                     WHEN hometeam='Inter Milan' 
                         THEN goalsfor 
                     WHEN awayteam='Inter Milan'
                         THEN goalsagainst 
                 END) as points 
FROM fixtures WHERE hometeam='Inter Milan' OR awayteam='Inter Milan'

И избегайте многократного сканирования. Также использование UNION добавит неявный DISTINCT, который может исказить ваши результаты, если у вас есть игра с теми же очками на выезде, что и дома в другой игре.

person Code Magician    schedule 02.11.2011

Попробуй это ...

SELECT team, SUM(points) FROM (
  SELECT hometeam as team, SUM(goalsfor) as points FROM fixtures WHERE hometeam='Inter Milan'
  UNION 
  SELECT awayteam as team, SUM(goalsagainst) as points FROM fixtures WHERE awayteam='Inter Milan') team_pts
person polster    schedule 02.11.2011
comment
получение каждой производной таблицы должно иметь собственный псевдоним - person Aasim Azam; 02.11.2011
comment
Отредактировано путем добавления псевдонима таблицы после предложения select. - person polster; 02.11.2011