处理while循环和分组MYSQL PHP值

处理while循环和分组MYSQL PHP值,php,html,mysql,while-loop,Php,Html,Mysql,While Loop,我有一张这样的桌子 author_id author_book rating 1 ABC 5 1 DEF 6 2 PPP 8 3 FFF 9 这是我的PHP代码 <table> <tr><td>Author ID&

我有一张这样的桌子

    author_id   author_book     rating  
    1           ABC             5
    1           DEF             6
    2           PPP             8
    3           FFF             9
这是我的PHP代码

    <table>
    <tr><td>Author ID</td><td>Author Book</td><td>Rating</td></tr>
    <?php
    $row_data = mysql_query("select * from author_master" );
    while($row = mysql_fetch_array($row_data) ) {
    ?>
    <tr>
    <td><?php echo $row['author_id']; ?></td>
    <td><?php echo $row['author_book']; ?></td>
    <td><?php echo $row['rating']; ?></td>
    </tr>
    <?php } ?>
    </table>
尽量避免使用mysql_*函数。使用mysqli.*。你只需要先把他们分组。考虑这个例子:

<?php

$link = new mysqli('localhost', 'test', 'test', 'test');
$query = mysqli_query($link, 'SELECT * FROM author_master ORDER BY author_id');
$books = array();
while($row = $query->fetch_assoc()) {
    $books[$row['author_id']][] = $row;
}
?>

<table border="0" cellpadding="10">
    <thead>
        <tr>
            <th>Author ID</th>
            <th>Author Book</th>
            <th>Rating</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach($books as $author_id => $values): ?>
            <tr>
                <td><?php echo $author_id; ?></td>
                <td><?php foreach($values as $author_book) {echo $author_book['author_book'] . '<br/>';} ?></td>
                <td><?php foreach($values as $author_book) {echo $author_book['rating'] . '<br/>';} ?></td>
            </tr>
        <?php endforeach; ?>
    </tbody>
</table>
尽量避免使用mysql_*函数。使用mysqli.*。你只需要先把他们分组。考虑这个例子:

<?php

$link = new mysqli('localhost', 'test', 'test', 'test');
$query = mysqli_query($link, 'SELECT * FROM author_master ORDER BY author_id');
$books = array();
while($row = $query->fetch_assoc()) {
    $books[$row['author_id']][] = $row;
}
?>

<table border="0" cellpadding="10">
    <thead>
        <tr>
            <th>Author ID</th>
            <th>Author Book</th>
            <th>Rating</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach($books as $author_id => $values): ?>
            <tr>
                <td><?php echo $author_id; ?></td>
                <td><?php foreach($values as $author_book) {echo $author_book['author_book'] . '<br/>';} ?></td>
                <td><?php foreach($values as $author_book) {echo $author_book['rating'] . '<br/>';} ?></td>
            </tr>
        <?php endforeach; ?>
    </tbody>
</table>
试试这个

<table>
    <tr><td>Author ID</td><td>Author Book</td><td>Rating</td></tr>
    <?php
    $row_data = mysql_query("select * from author_master group by author_id" );
    $temp=0;
    while($row = mysql_fetch_array($row_data) ) {
    if($temp==0)
    {
      $temp = $row['author_id'];
    }
    ?>
    <tr>
    <td><?
    if($temp != $row['author_id'])
    {
      $temp = $row['author_id'];
      php echo $temp; 
    }
    ?></td>
    <td><?php echo $row['author_book']; ?></td>
    <td><?php echo $row['rating']; ?></td>
    </tr>
    <?php } ?>
    </table>
试试这个

<table>
    <tr><td>Author ID</td><td>Author Book</td><td>Rating</td></tr>
    <?php
    $row_data = mysql_query("select * from author_master group by author_id" );
    $temp=0;
    while($row = mysql_fetch_array($row_data) ) {
    if($temp==0)
    {
      $temp = $row['author_id'];
    }
    ?>
    <tr>
    <td><?
    if($temp != $row['author_id'])
    {
      $temp = $row['author_id'];
      php echo $temp; 
    }
    ?></td>
    <td><?php echo $row['author_book']; ?></td>
    <td><?php echo $row['rating']; ?></td>
    </tr>
    <?php } ?>
    </table>

您必须将代码分为两个独立的部分:DB抓取和抓取数据的输出。 此外,还必须按“作者id”键对获取的数据进行分组

不知怎的,是这样的:

<table>
<tr><td>Author ID</td><td>Author Book</td><td>Rating</td></tr>
<?php
$result = array();
$row_data = mysql_query("select * from author_master" );
while($row = mysql_fetch_array($row_data) ) {
    $id = $row['author_id'];
    if (!isset($result[$id])) $result[$id] = array('author_book' => array(), 'rating' => array());
    array_push($result[$id]['author_book'], $row['author_book']);
    array_push($result[$id]['rating'], $row['rating']);
}

foreach ($result as $id => $data) {
?>
    <tr>
    <td><?php echo $id; ?></td>
    <td><?php echo implode('<br>', $data['author_book']); ?></td>
    <td><?php echo implode('<br>', $data['rating']); ?></td>
    </tr>
<?php
}
?>
</table>

您必须将代码分为两个独立的部分:DB抓取和抓取数据的输出。 此外,还必须按“作者id”键对获取的数据进行分组

不知怎的,是这样的:

<table>
<tr><td>Author ID</td><td>Author Book</td><td>Rating</td></tr>
<?php
$result = array();
$row_data = mysql_query("select * from author_master" );
while($row = mysql_fetch_array($row_data) ) {
    $id = $row['author_id'];
    if (!isset($result[$id])) $result[$id] = array('author_book' => array(), 'rating' => array());
    array_push($result[$id]['author_book'], $row['author_book']);
    array_push($result[$id]['rating'], $row['rating']);
}

foreach ($result as $id => $data) {
?>
    <tr>
    <td><?php echo $id; ?></td>
    <td><?php echo implode('<br>', $data['author_book']); ?></td>
    <td><?php echo implode('<br>', $data['rating']); ?></td>
    </tr>
<?php
}
?>
</table>

只需检查值的变化:-

<?php

$prev_author_id = null;

?>
<table>
<tr><td>Author ID</td><td>Author Book</td><td>Rating</td></tr>
<?php
$row_data = mysql_query("SELECT * FROM author_master ORDER BY author_id   author_book" );
while($row = mysql_fetch_array($row_data) ) 
{
    echo "<tr>";
    echo "<td>".(($prev_author_id != $row['author_id']) ? $row['author_id'] : '&nbsp;'."</td>";
    echo "<td>".$row['author_book']."</td>";
    echo "<td>".$row['rating']."</td>";
    echo "</tr>";
    $prev_author_id = $row['author_id'];
} 
?>
</table>

只要对返回的行进行排序,就可以在输出数据之前保存可能大量的数据。

只需检查值的更改:-

<?php

$prev_author_id = null;

?>
<table>
<tr><td>Author ID</td><td>Author Book</td><td>Rating</td></tr>
<?php
$row_data = mysql_query("SELECT * FROM author_master ORDER BY author_id   author_book" );
while($row = mysql_fetch_array($row_data) ) 
{
    echo "<tr>";
    echo "<td>".(($prev_author_id != $row['author_id']) ? $row['author_id'] : '&nbsp;'."</td>";
    echo "<td>".$row['author_book']."</td>";
    echo "<td>".$row['rating']."</td>";
    echo "</tr>";
    $prev_author_id = $row['author_id'];
} 
?>
</table>
只要对返回的行进行排序,就可以在输出数据之前保存可能大量的数据