按顺序列出数据库输出

3
我可以帮助您进行翻译。这是一段关于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>
"; 

?>

你所需要做的就是跟踪类型何时发生变化。 - user557846
感谢Dagon的回答,我正在处理这个问题。同时也感谢Leushenko对问题进行编辑。 - jonas
4个回答

4
也许这可以帮助您。
<?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_*函数。


还有一个问题。使用MYSQL和MYSQLI有什么区别吗?@Mohit - jonas
基本上它有助于防止SQL注入 - Mohit S

2

个人而言,我更喜欢先按照我将要显示的方式重新组织数据,这使得循环遍历结果并显示它们的代码更易读,例如:

<?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>

谢谢,Matt。我现在会开始处理它。你有其他更简单的方法吗? - jonas
@sbjumani的回答可以说是更简单的方法。我只是编辑了那个回答中看起来像是一个错误,所以请再试一次,看看它是否适用于您。我仍然更喜欢我的方法,但另一方面,我是一位更有经验的PHP开发人员,因此我可以理解更多的代码可能会使它对PHP新手不太理想。请注意,对于更复杂的情况,我的方法实际上会减少总代码量,并使其更易读。 - Matt Browne
好的,谢谢Matt。我现在会尝试这个方法,尝试后会给你反馈。 - jonas

1
添加一个 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将样式应用于缩进的值。

谢谢sbjumani。我明白你的逻辑了。但是当我尝试运行代码时,输出结果看起来像这样。*水果香蕉|农场|100000 苹果|公园|100000 茄子|街道|500 苦瓜|村庄|2000 - jonas
蔬菜单词不输出 - jonas
感谢您的编辑。被接受的答案,会导致多个查询而不是一次调用数据吗?哪种方法会导致响应速度变慢? - sbjumani

1
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;");

感谢Sunil的回答。我知道SQL中的order by方法。我想知道的是如何使用PHP将数据以有序列表的形式输出到我的网页上的代码。 - jonas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接