繁体   English   中英

输出数据库在有序列表中

[英]output database in an ordered list

我在MySQL数据库中有这个表(只是一个示例)

+----+--------------+---------+--------+-----------+
| id | name         | place   | number | type      |
+----+--------------+---------+--------+-----------+
| 1  | Banana       | farm    | 100000 | fruit     |
| 2  | Apple        | park    | 100000 | fruit     |
| 3  | Eggplant     | street  | 500    | vegetable |
| 4  | Bitter Gourd | village | 2000   | vegetable | 
+----+--------------+---------+--------+-----------+

...

我使用PHP将数据提取到我的网页,我希望它按照这样的类型显示在有序列表中。

  • 水果

    • 香蕉| 农场| 100000
    • 苹果| 公园| 100000
  • 蔬菜

    • 茄子| 街道| 500
    • 苦瓜| 村庄| 2000

任何人都可以帮助我使用代码,我的数据库中有很多类型。 我已经能够将数据从数据库中提取到我的网页了。

使用此代码,但我想以同样的方式输出数据。

<?php

$result = mysql_query("SELECT * FROM table;");

while($row = mysql_fetch_array($result)) {
    $id = $row['id'];   
    $name = $row['name'];
    $type = $row['type'];   

    echo "
        <tr>
            <td>$id</td>
            <td>$name</td>
            <td>$type</td>
        </tr>
"; 

?>

可能这会对你有所帮助

<?php
$result = mysql_query("SELECT DISTINCT(type) FROM table");
while($row=mysql_fetch_array($result))
{
    echo "<ul>
            <li>$row['type']
                <ul>";
    $result1 = mysql_query("SELECT * FROM table WHERE type=$row['type']");
    while($row1=mysql_fetch_array($result1))
    {
        echo "<li>$row1['name'] | $row1['place'] | $row1['number']</li>";
    }
    echo "</ul></li></ul>"
?>

虽然MYSQL已被弃用,但请使用MYSQLI_ *函数

我个人更喜欢以我首先显示它的方式重新组织数据,这使得代码循环结果并显示它们更具可读性,例如:

<?php
$result = mysql_query("SELECT * FROM table ORDER BY number;");

$produceByType = array();

while ($row = mysql_fetch_array($result)) {
    $produceByType[ $row['type'] ][] = $row;
}
?>

<table>
<?php
foreach ($produceByType as $type => $produce):
?>
    <tr>
        <th colspan="3"><?= $type ?></th>
    </tr>
    <?php
    foreach ($produce as $row): ?>
        <tr>
            <td><?= $row['name'] ?></td>
            <td><?= $row['place'] ?></td>
            <td><?= $row['number'] ?></td>
        </tr>
    <?php
    endforeach;
endforeach; ?>
</table>

添加order by子句

select * from table order by type, name;

接下来,将类型转换为变量。 根据结果​​中新行的新类型检查类型。 如果它相同,则渲染新行,否则关闭行并插入新行。

<?php
$result = mysql_query("SELECT * FROM table order by type, name;");
$oldtype = "";
while($row=mysql_fetch_array($result))
{

    $id = $row['id'];   
    $name = $row['name'];
    $type = $row['type'];   

    if ($type != $oldtype)
    {
        echo "
            <tr>
                <td>$type</td>
            </tr>
        ";
        $oldtype = $type;
    }

    echo "
            <tr>
                <td>$name</td>
            </tr>
    ";
    } ?>

我没有运行代码,但逻辑是正确的。

请使用css将样式应用于缩进的值。

SQL允许您使用“ORDER BY”子句对数据进行排序

例如,按照您执行的数量/数量来订购数据

SELECT * FROM table ORDER BY number;

这将按最小或最大的数量对结果进行排序。 也,

SELECT * FROM table ORDER BY number DESC;

将按数量从最大到最小排序结果。

在你的情况下,似乎你想按他们排序然后数量。 在那种情况下你可以做到

SELECT * FROM table ORDER BY type ASC, number DESC;

根据您的选择,相应地修改行中的SQL查询。 例如:

$result = mysql_query("SELECT * FROM table;");

$result = mysql_query("SELECT * FROM table ORDER BY type ASC, number DESC;");

暂无
暂无

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

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