Как сложить конкретные ячейки в таблице MySQL - PullRequest
1 голос
/ 02 ноября 2011

У меня есть следующая таблица 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» и т. д. для других команд.

Ответы [ 2 ]

3 голосов
/ 02 ноября 2011

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

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, которое может исказить ваши результаты, если у вас есть игра с теми же очками на выезде, что и домашними очками в другой игре.

1 голос
/ 02 ноября 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...