Php 在有序列表中输出数据库
我的MySQL数据库中有这个表(只是一个示例) 我使用PHP将数据提取到我的网页,并希望它按如下类型显示在有序列表中Php 在有序列表中输出数据库,php,html,mysql,html-lists,Php,Html,Mysql,Html Lists,我的MySQL数据库中有这个表(只是一个示例) 我使用PHP将数据提取到我的网页,并希望它按如下类型显示在有序列表中 果 香蕉农场100000 苹果园10万 蔬菜 茄子街500号 苦瓜|村| 2000 有人能帮我写代码吗?我的数据库里有很多类型。我已经能够从数据库获取数据到我的网页 使用此代码,但我希望以与上面相同的方式输出数据 <?php $result = mysql_query("SELECT * FROM table;"); while($row = mysql_f
- 果
- 香蕉农场100000
- 苹果园10万
- 蔬菜
- 茄子街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>
";
?>
添加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;");
到
就我个人而言,我更喜欢以我将首先显示数据的方式重新组织数据,这使得代码在结果上循环并显示它们更具可读性,例如:
<?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>
这可能会对您有所帮助
<?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>"
?>
你所需要做的就是跟踪类型更改的时间Hanks Dagon回答,我现在正在处理。还感谢Leushenko编辑了这个问题,感谢Matt现在正在做这个问题。你有其他更简单的方法吗?@sbjumani的回答可以说是一种更简单的方法。我刚刚编辑了答案中看起来像bug的内容,所以请再试一次,看看它是否适合您。我仍然喜欢我的方法,但是我是一个更有经验的PHP开发人员,所以我可以看到更多的代码总量可能会降低对PHP新手的期望。请注意,对于更复杂的情况,我的方法实际上会减少代码总量,并使其更具可读性。好的,谢谢Matt。我现在就试试,以后会给你反馈。谢谢Sunil的回答。我知道SQL中的ORDERBY方法。我想知道的是关于如何使用PHP使用orderd列表输出网页中数据的代码。我明白你的逻辑。但当我尝试代码时,输出结果如下所示*水果香蕉|农场| 100000苹果|公园| 100000茄子|街| 500苦瓜|村| 2000蔬菜字不输出手帕编辑。被接受的答案是,这不会导致多个查询而不是一次数据调用吗?哪种方法会导致反应较慢?还有一个问题。使用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>
<?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>"
?>