Динамический ряд строк при извлечении записей из базы данных

Ename Sal tom 100 tom 200 bill 100 bill 250 bill 450 bill 400 

Это структура запроса и html, которая дала указанный выше результат.

 <?php $sql = "select * from emp "; $result= mysql_query($sql); while($row=mysql_fetch_array($result)) { <tr > <td rowspan="" ><?php echo $row['ename']; ?></td> <td><?php echo $row['esal']?></td> </tr> <? }?> в <?php $sql = "select * from emp "; $result= mysql_query($sql); while($row=mysql_fetch_array($result)) { <tr > <td rowspan="" ><?php echo $row['ename']; ?></td> <td><?php echo $row['esal']?></td> </tr> <? }?> 

Как я могу получить следующий результат:

 Ename Sal tom 100 200 bill 100 250 450 400 

извините за мой бедный английский: здесь я ответил на этот вопрос. Как показать данные из базы данных с динамическими рядами . Опять же позвольте мне попытаться ответить на этот вопрос. Сначала не работаем над запросом mysql.

Работа в MySql:

В запросе mysql, на который вы не запросили запрос. Потому что в реальной жизни вы не можете ожидать, что после всех записей тома будет записан счет. Например, выполните следующую установку.

 INSERT INTO test_work(ename, sal) VALUES("tom", 100), ("bill", 450), ("bill", 100), ("tom", 200), ("bill", 250), ("bill", 400), ("James", 50); SELECT * FROM test_work; 

Результат:

 +-------+------+ | ename | sal | +-------+------+ | tom | 100 | | bill | 450 | | bill | 100 | | tom | 200 | | bill | 250 | | bill | 400 | | James | 50 | +-------+------+ 

Таким образом, ваш запрос mysql должен быть порядком ename. Здесь также должен быть рукоположен каждый человек. Итак, наш запрос:

 SELECT * FROM emp ORDER BY ename, sal; 

КОДИРОВАНИЕ:

  1. Вся задача, которую мы можем разделить на три части.
    1. Mysql Сбор и извлечение данных в массиве.
    2. Расчет рядов
    3. печать

MySql Datafetching:

Во время сбора данных с сервера mysql всегда мы должны попытаться использовать функцию mysql_fetch_assoc вместо mysql_fetch_array. Поскольку mysql_fetch_assoc будет возвращать только ename и sal. Но mysql_fetch_array вернет массив с индексами ename, sal, 0, 1.

  # connect to mysql server # and select the database, on which # we will work. $conn = mysql_connect('', 'root', ''); $db = mysql_select_db('test'); # Query the data from database. $query = 'SELECT * FROM test_work ORDER BY ename, sal'; $result = mysql_query($query); # Intialize the array, which will # store the fetched data. $sal = array(); $emp = array(); # Loop over all the fetched data, and save the # data in array. while($row = mysql_fetch_assoc($result)) { array_push($emp, $row['ename']); array_push($sal, $row['sal']); } 

Расчет диапазона строк:

  # Intialize the array, which will store the # rowspan for the user. $arr = array(); # loop over all the sal array for ($i = 0; $i < sizeof($sal); $i++) { $empName = $emp[$i]; # If there is no array for the employee # then create a elemnt. if (!isset($arr[$empName])) { $arr[$empName] = array(); $arr[$empName]['rowspan'] = 0; } $arr[$empName]['printed'] = "no"; # Increment the row span value. $arr[$empName]['rowspan'] += 1; } 

когда вы будете печатать_r массивом arr, выход будет:

 Array ( [bill] => Array ( [rowspan] => 4 [printed] => no ) [James] => Array ( [rowspan] => 1 [printed] => no ) [tom] => Array ( [rowspan] => 2 [printed] => no ) ) 

Печать с помощью рядов:

  echo "<table cellspacing='0' cellpadding='0'> <tr> <th>Ename</th> <th>Sal</th> </tr>"; for($i=0; $i < sizeof($sal); $i++) { $empName = $emp[$i]; echo "<tr>"; # If this row is not printed then print. # and make the printed value to "yes", so that # next time it will not printed. if ($arr[$empName]['printed'] == 'no') { echo "<td rowspan='".$arr[$empName]['rowspan']."'>".$empName."</td>"; $arr[$empName]['printed'] = 'yes'; } echo "<td>".$sal[$i]."</td>"; echo "</tr>"; } echo "</table>"; 

Оптимизация кода:

Теперь мы можем комбинировать вычисления rowspan и выборку данных mysql. Поскольку во время сохранения извлеченных данных в массиве мы можем вычислить rowspan. Итак, наш окончательный код:

 <!DOCTYPE html> <html> <head> <style> table tr td, table tr th{ border: black 1px solid; padding: 5px; } </style> </head> <body> <?php # connect to mysql server # and select the database, on which # we will work. $conn = mysql_connect('', 'root', ''); $db = mysql_select_db('test'); # Query the data from database. $query = 'SELECT * FROM test_work ORDER BY ename, sal'; $result = mysql_query($query); # $arr is array which will be help ful during # printing $arr = array(); # Intialize the array, which will # store the fetched data. $sal = array(); $emp = array(); #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%# # data saving and rowspan calculation # #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%# # Loop over all the fetched data, and save the # data. while($row = mysql_fetch_assoc($result)) { array_push($emp, $row['ename']); array_push($sal, $row['sal']); if (!isset($arr[$row['ename']])) { $arr[$row['ename']]['rowspan'] = 0; } $arr[$row['ename']]['printed'] = 'no'; $arr[$row['ename']]['rowspan'] += 1; } #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # DATA PRINTING # #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%# echo "<table cellspacing='0' cellpadding='0'> <tr> <th>Ename</th> <th>Sal</th> </tr>"; for($i=0; $i < sizeof($sal); $i++) { $empName = $emp[$i]; echo "<tr>"; # If this row is not printed then print. # and make the printed value to "yes", so that # next time it will not printed. if ($arr[$empName]['printed'] == 'no') { echo "<td rowspan='".$arr[$empName]['rowspan']."'>".$empName."</td>"; $arr[$empName]['printed'] = 'yes'; } echo "<td>".$sal[$i]."</td>"; echo "</tr>"; } echo "</table>"; ?> </body> </html> 

Результат:

занятая кошка

Что-то вроде этого?

 While data echo <tr> <td rowspan="3"><p>numbers</p></td> <td><p>1</p></td> <td><p>2</p></td> </tr> 

Пожалуйста, напишите что-нибудь из вашего кода.

Вы можете проверить состояние, подобное этому, с последней строкой и текущей строкой.

 $sql = "select * from emp"; $result= mysql_query($sql); echo "<table>"; while($row=mysql_fetch_array($result)) { $now=$row[0]; if($last!=$now) { echo "<tr><td>$row['ename']</td><td>$row['esal']</td></tr>"; }else{ echo "<tr><td>&nbsp;</td><td>$row['esal']</td></tr>"; } $last = $row[0]; } echo "</table>"; в $sql = "select * from emp"; $result= mysql_query($sql); echo "<table>"; while($row=mysql_fetch_array($result)) { $now=$row[0]; if($last!=$now) { echo "<tr><td>$row['ename']</td><td>$row['esal']</td></tr>"; }else{ echo "<tr><td>&nbsp;</td><td>$row['esal']</td></tr>"; } $last = $row[0]; } echo "</table>"; 

Я надеюсь, что это поможет вам.

Это должно быть так

 <?php $sql = "SELECT * FROM emp "; $result= mysql_query($sql); while($row=mysql_fetch_array($result)): $ename = $row['ename']; // count the esal in each ename $sql2 = "SELECT * FROM emp WHERE ename=$ename"; $result2 = mysql_query($sql2); $count_result2 = mysql_num_rows($result2); ?> <tr > <td rowspan="<?php echo $count_result2; ?>"><?php echo $row['ename']; ?></td> <?php // loop each esal while($row2 = mysql_fetch_array($result2)): ?> <td><?php echo $row['esal']; ?></td> </tr> <?php endwhile; // endwhile for each esal looping endwhile; // endwhile for the main looping ?> в <?php $sql = "SELECT * FROM emp "; $result= mysql_query($sql); while($row=mysql_fetch_array($result)): $ename = $row['ename']; // count the esal in each ename $sql2 = "SELECT * FROM emp WHERE ename=$ename"; $result2 = mysql_query($sql2); $count_result2 = mysql_num_rows($result2); ?> <tr > <td rowspan="<?php echo $count_result2; ?>"><?php echo $row['ename']; ?></td> <?php // loop each esal while($row2 = mysql_fetch_array($result2)): ?> <td><?php echo $row['esal']; ?></td> </tr> <?php endwhile; // endwhile for each esal looping endwhile; // endwhile for the main looping ?>