mysql — как отобразить данные в два столбца с php с заголовком

У меня есть база данных

---------------------------------------------
no | name   | code |  grade
---------------------------------------------
1  | john   | A1   | C
2  | john   | A2   | D
3  | john   | A3   | B
4  | tom    | A1   | A
5  | john   | A4   | A
6  | alice  | A1   | C
7  | alice  | A2   | D
8  | john   | A5   | D
9  | john   | A6   | C
---------------------------------------------

когда я хочу показать данные с именем john, я хочу результат с 2 столбца:

---------------------------------------------------------------
no | name   | code   |  grade | no | name   | code   |  grade |
---------------------------------------------------------------
1  | john   | A1     | C      | 5  | john   | A5     | D      |
2  | john   | A2     | D      | 6  | john   | A6     | C      |
3  | john   | A3     | B      |    |        |        |        |
4  | john   | A4     | A      |    |        |        |        |
---------------------------------------------------------------

это мой код, который я уже пробую

$result = mysql_query("select * from grade ");

echo "<table border='1'><tr>";
echo "<td>no</td>";
echo "<td>name</td>";
echo "<td>code</td>";
echo "<td>grade</td></tr><tr>";

$no = 1;
$count = 1;

while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
extract($row);

echo "<td>$no</td>";
echo "<td>$row[name]</td>";
echo "<td>$row[code]</td>";
echo "<td>$row[grade]</td>";

if ($count++ % 2 == 0)
{
echo "</tr><tr>";
$no++;
}
}

echo "</tr></table>";

Но результат не то, что я хочу, это результат, когда я запускаю свой код


no | name   | code   |  grade |    |        |        |        |
---------------------------------------------------------------
1  | john   | A1     | C      | 1  | john   | A4     | A      |
2  | john   | A2     | D      | 2  | john   | A5     | D      |
3  | john   | A3     | B      | 3  | john   | A6     | C      |
---------------------------------------------------------------

Может ли кто-нибудь помочь мне … спасибо

0

Решение

Это проблема представления, поэтому ее можно решить двумя способами.
1. Вы можете сделать эти столбцы, используя современный HTML:

<section style="-webkit-column-count:2; -webkit-column-gap:15;">
<div class='columns'>
<table>
<tr>
<th>no</th>
<th>name</th>
<th>code</th>
<th>grade</th>
</tr>
<?php
$result = mysql_query("select * from grade ");
$no = 1;
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo '<tr>';
echo "<td>{$row['no']}</td>";
echo "<td>{$row['name']}</td>";
echo "<td>{$row['code']}</td>";
echo "<td>{$row['grade']}</td>";
echo '</tr>';
$no++;
}
?>
</table>
</div>
</section>

2. Если вы хотите придерживаться простых таблиц, вам нужно сделать несколько расчетов:
Во-первых, вам нужно знать полное количество оценок, которые вы собираетесь показать. Вы можете получить его с помощью SQL-запроса (более эффективный способ), я сделаю это, предварительно загрузив все данные в массив. Нижний колонтитул HTML и заголовок опущены для краткости.

<?php
$data = array();
$result = mysql_query('SELECT * FROM grade;');
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$data[] = $row;
}

$rows = (int) ceil(count($data)/2);

for ($i=0; $i < $rows; $i++) {
$no = $i + 1;
echo '<tr>';
echo "<td>{$no}</td>";
echo "<td>{$data[$i]['name']}</td>";
echo "<td>{$data[$i]['code']}</td>";
echo "<td>{$data[$i]['grade']}</td>";
if (array_key_exists($i + $rows, $data)) {
$no = $i + $rows + 1;
echo "<td>{$no}</td>";
echo "<td>{$data[$i + $rows]['name']}</td>";
echo "<td>{$data[$i + $rows]['code']}</td>";
echo "<td>{$data[$i + $rows]['grade']}</td>";
} else {
echo "<td>&nbsp;</td>";
echo "<td>&nbsp;</td>";
echo "<td>&nbsp;</td>";
echo "<td>&nbsp;</td>";
}
echo "</tr>\n";
}
0

Другие решения

Я не проверял это и не проверял на ошибки, но я думаю, что это именно то, что вы пытаетесь достичь.

$result = mysql_query("select * from grade ");
$orig_count = mysql_num_rows($result);

if ( $orig_count % 2 != 0 )
$count = $orig_count + 1;

$cols = $count / 2;

//draw header
echo "<table border='1'><tr>";
echo "<td>no</td>";
echo "<td>name</td>";
echo "<td>code</td>";
echo "<td>grade</td></tr><tr>"
for ( $i = 0; $i < $cols; i++ )
{
if ( $orig_count == 0 )
break; //zero results

//first column
echo "<td>$i</td>";
echo "<td>".mysql_result( $result, $i, "name" )."</td>";
echo "<td>".mysql_result( $result, $i, "code" )."</td>";
echo "<td>".mysql_result( $result, $i, "grade" )."</td>";

//second column
if ( $i > $orig_count )
{
echo "<td>&nbsp;</td>";
echo "<td>&nbsp;</td>";
echo "<td>&nbsp;</td>";
echo "<td>&nbsp;</td>";
}
else
{
echo "<td>".$i+($count/2)."</td>";
echo "<td>".mysql_result( $result, $i+($count/2), "name" )."</td>";
echo "<td>".mysql_result( $result, $i+($count/2), "code" )."</td>";
echo "<td>".mysql_result( $result, $i+($count/2), "grade" )."</td>";
}
}

//finish off
echo "</tr></table>";
-1

По вопросам рекламы [email protected]