#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.