繁体   English   中英

PHP / MYSQL对MySQL数据的回显表进行排序

[英]PHP/MYSQL Sorting an echo table of mysql data

我已经完成了一个使用mysql构建php网站的课程。
我需要能够基于列对数据表进行排序。 使用PDO从mysql DB中检索数据。 然后我在循环遍历每一行数据时只回显一个表

关于如何按列对数据进行排序的任何想法? 最好,我希望能够通过单击表头对数据进行排序(升序)。 但是我愿意接受想法。

下面的代码:PHP:

function displayBooks($data){
    echo "<table id= \"allBooks\">";
    echo "<th>Book ID</th><th>Title</th><th>Description</th><th>In Stock</th><th>Price</th><th>Cateogry</th>";
    #foreach($data as $row)
    {
        echo "<tr>";
        echo "<td>".$row['bookID']."</td>";
        echo "<td>".$row['title']."</td>";
        echo "<td>".$row['description']."</td>";
        echo "<td>".$row['quantity']."</td>";
        echo "<td>£".$row['price']."</td>"; 
        echo "<td>".$row['name']."</td>"; 
        echo "</tr>"; 
    }
    echo "</table>";

....

//Retrieve all books
    $all_books_query = "SELECT b.bookID,b.title,b.description,b.quantity,b.price,c.name FROM Books b
    INNER JOIN Book_Category bc ON bc.bookID = b.bookID
    INNER JOIN Category c ON c.catID = bc.catID
    GROUP BY b.bookID;";
    $rows = $db->query($all_books_query)->fetchAll();

在页面的其余部分中,我还有更多的PHP。 不知道我还需要在其中包括什么才能使问题更有意义,但是任何想法都会有所帮助。

设置一种机制,将用户的排序要求发送回服务器(query param?post?),并使用这些要求在MySQL查询中设置ORDER BY子句。

这是一个简单的,非鲁棒的实现

您必须使用参数创建一些活动链接,如下所示:

function displayBooks($data){
   echo "<table id= \"allBooks\">";
   echo "<th><a href='index.php?col=1&order_by=1'>Book ID ASC</a>|<a href='index.php?col=1&order_by=2'>Book ID DESC</a></th><th><a href='index.php?col=2&order_by=1'>Title ASC</a>|<a href='index.php?col=2&order_by=2'>Title ID DESC</a></th>";
#foreach($data as $row)
{
    echo "<tr>";
    echo "<td>".$row['bookID']."</td>";
    echo "<td>".$row['title']."</td>";
    echo "</tr>"; 
}
echo "</table>";

第二个剧本

//Retrieve all books

$order_by = 'ASC';
switch ( (int)$_GET['order_by'] ) {
case 1:
  $order_by = 'ASC';
break;
case 2:
  $order_by = 'DESC';
break;
}


$col= "bookID";
switch ( (int)$_GET['col'] ) {
case 1:
  $col = 'bookID';
break;
case 2:
  $col = 'title';
break;
}


$all_books_query = "SELECT b.bookID,b.title,b.description,b.quantity,b.price,c.name FROM Books b
INNER JOIN Book_Category bc ON bc.bookID = b.bookID
INNER JOIN Category c ON c.catID = bc.catID
GROUP BY b.bookID
ORDER BY $col $order_by";

$rows = $db->query($all_books_query)->fetchAll();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM