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

#php #mysql #sql #sum #echo

#php #mysql #sql #сумма #echo

Вопрос:

У меня есть следующая таблица 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;

    ?>
 

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

Ответ №1:

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

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

Ответ №2:

Попробуйте это …

 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
 

Комментарии:

1. получение «Каждая производная таблица должна иметь свой собственный псевдоним»

2. Отредактировано путем добавления псевдонима таблицы после предложения select.