PHP MySQL – добавление строки в середине цикла

Мне интересно, можно ли добавить строку в середине цикла на PHP без необходимости запускать запрос несколько раз, используя WHERE 'team' = 'leader_name' . Скажем, я использую while ($row = mysqli_fetch_array($results)) для отображения моих результатов. В запросе я собираю каждую команду в 1 запросе. Поэтому у меня 5 команд, и я хочу иметь разделитель между каждой командой. Является ли это возможным?

Текущие результаты:

 Team Leader | Name ---------------+--------------------- Team1 | Name1 Team1 | Name2 Team2 | Name3 Team3 | Name4 Team3 | Name5 Team3 | Name6 Team4 | Name7 Team4 | Name8 Team5 | Name9 Team5 | Name10 Team5 | Name11 Team5 | Name12 

Ожидаемые результаты:

 Team Leader | Name ====================================== Team1 | Name1 Team1 | Name2 ------------------------------------- Totals: | 2 ------------------------------------- Team2 | Name3 ------------------------------------- Totals: | 1 ------------------------------------- Team3 | Name4 Team3 | Name5 Team3 | Name6 ------------------------------------- Totals: | 3 ------------------------------------- Team4 | Name7 Team4 | Name8 ------------------------------------- Totals: | 2 ------------------------------------- Team5 | Name9 Team5 | Name10 Team5 | Name11 Team5 | Name12 ------------------------------------- Totals: | 4 ------------------------------------- 

редактировать

Предположим, я использую

 $data = mysqli_query ("Select * from tbl_name"); while ($row = mysqli_fetch_array($data)) { echo "<tr>"; echo "<td>".$row['Team']."</td>"; echo "<td>".$row['Name']."</td>"; echo "</tr>"; } 

Как вы примете пример ниже

 writeheader(); $team = $data[0]['team']; $count = 0; foreach($data as $row){ $count += 1; //if the current row's team is different than previous than add seperator if($row['team'] != $team){ $team = $row['team']; writeseperator(); writetotal($count); $count = 0; } writerow(); } 

Где я должен это поставить? Я смущен

Конечно, это возможно. Вы не указали свой код, так что я дам вам псевдокод.

 writeheader(); $team = $data[0]['team']; $count = 0; foreach($data as $row){ $count += 1; //if the current row's team is different than previous than add seperator if($row['team'] != $team){ $team = $row['team']; writeseperator(); writetotal($count); $count = 0; } writerow(); } 

Вы можете получить что-то подобное непосредственно из MySQL с помощью модификатора WITH ROLLUP в предложение GROUP BY :

 SELECT Team_Leader, Name, COUNT(*) FROM my_table GROUP BY Team_Leader, Name WITH ROLLUP 

Посмотрите на sqlfiddle .

Тогда рендеринг результатов в желаемом формате просто должен был бы быть включен, если столбец Name равен NULL .

Я не уверен, понимаю ли я то, что вы хотите, но это может сработать:

 $team=""; while ($row = mysqli_fetch_array($results)) { if($team!=$row["leader_name"]) { if(!empty($team)) { //echo your separator or whatever here } $team=$row["leader_name"]; $team_count=1; } else { $team_count++; } } 
 $a= array(array("Team1","Name1"),array("Team1","Name2"),array("Team2","Name3"),array("Team3","Name4"),array("Team3","Name5"),array("Team3","Name6"),array("Team4","Name7"),array("Team4","Name8"),array("Team5","Name9"),array("Team5","Name10"),array("Team5","Name11"),array("Team5","Name12")); $columns = array_unique(array_column($a, 0)); //get the 'TeamX' part and select unique ones $count = 0; foreach($columns as $column){ //for each unique team foreach($a as $row){ if($row[0] == $column){ //search for a matching column and display it. //echo team and name $count++; //keep track of items quantity } } echo "-------------------------------------<br/>"; echo "Totals: $count <br/>"; echo "-------------------------------------"; $count = 0; //reset count for the next team } 

или На основании запроса @ eggyal сделайте эту модификацию и

 $query = "SELECT a.Team_Leader, a.Name, cnt FROM my_table a left join (select Team_Leader, count(Name) as cnt from my_table group by Team_Leader) b on a.Team_Leader = b.Team_Leader"; 

Затем вы можете найти общее количество имен в команде в каждой строке.