Ваша проблема связана с GROUP BY, как вы, вероятно, поняли.Это необходимо для того, чтобы подсчитать количество команд, но количество выводимых строк должно быть только 1 на команду - это то, что делает группировка.По сути, выполнение агрегатного запроса, такого как COUNT или SUM, несовместимо с одновременным выводом всех данных строки.Вы либо делаете одно, либо другое.
Теперь вы можете выполнить два запроса - один, чтобы получить счетчик, и один, чтобы получить все строки.Но на самом деле вам не нужно.Если вы просто выберете все строки, то в ваших данных будет подразумеваться количество команд.Так как вам все равно потребуется циклически просматривать их все, чтобы вывести их в HTML, вы также можете использовать этот процесс для отслеживания количества строк, приходящихся на команду, и создания «Всего».количество мест "заголовки в вашем HTML на основе этого.
Два ключа являются ключевыми для этого:
1) Заставить запрос выводить данные в полезном порядке:
SELECT * FROM my_example_table Order By team_name, arrival_time;
2) Не сразу выводить HTML на страницу, как только вы попадаете в строку таблицы.Вместо этого поместите фрагменты HTML в переменные, которые вы можете заполнить в разное время в процессе (так как вы не будете знать общее количество мест на группу, пока не зациклите все строки для этой команды), а затем объедините их все вместе впозже укажите окончательный результат:
$leaders = "SELECT * FROM my_example_table Order By team_name, arrival_time;";
$result = mysqli_query($connect, $leaders) or die ("<br>** Error in database table <b>".mysqli_error($connect)."</b> **<br>$sql");
$currentTeam = "";
$locationCount = 0;
$html = "";
$teamHtmlStart = "";
$teamHtmlEnd = "";
if ($result->num_rows > 0)
{
while($row = $result->fetch_assoc())
{
//run this bit if we've detected a new team
if ($currentTeam != $row["team_name"]) {
//finalise the previous team's html and append it to the main output
if ($currentTeam != "") $html .= $teamHtmlStart.$locationCount.$teamHtmlEnd."</table></div>";
//reset all the team-specific variables
$currentTeam = $row["team_name"];
$teamHtmlStart = "<div class='red-border'><h2>".$currentTeam."<br><small>Total locations visited: ";
$locationCount = 0;
$teamHtmlEnd = "</small></h2>
</div>
<div class='data-holder'>
<table>
<tr>
<th>Location</th>
<th>Time of arrival</th>
</tr>";
}
$teamHtmlEnd .= "<tr><td>". $row["location"]. "</td> <td>". $row["arrival_time"]. "</td></tr>";
$locationCount++;
}
//for the final team (since the loop won't go back to the start):
$html .= $teamHtmlStart.$locationCount.$teamHtmlEnd."</table></div>";
echo $html;
}
else {
echo "0 results";
}
Вот демонстрационная программа, работающая в режиме реального времени (с использованием некоторых статических данных вместо SQL-запроса): http://sandbox.onlinephpfunctions.com/code/2f52c1d7ec242f674eaca5619cc7b9325295c0d4