2013-09-16 3 views
0

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

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

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(); 
} 

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

+0

Да, конечно, это –

+0

Не могли бы вы уточнить? :) –

ответ

3

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

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(); 
} 
+2

как насчет счета? – Bere

+0

@Bere Там вы идете. –

+0

Извините, я не слишком уверен, как использовать код. Я приведу пример моего кода в сообщении. –

1

Вы могли бы получить что-то подобное непосредственно с MySQL, используя WITH ROLLUPmodifier своей статье GROUP BY:

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

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

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

+0

Это не то, что хочет OP, похоже. –

+0

@AlmaDoMundo: Уточните? – eggyal

+0

Быстрый просмотр: он будет генерировать 3 столбца, в то время как потребности OP 2. –

0

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

$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++; 
    } 
} 
0
$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"; 

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

Смежные вопросы