我的数据库中有两个表:
table name: Table1 Table2
columns id1;name1 id2;name2;id1
我想用PHP输出一个嵌套的项目列表:
<ul>
<li>item1 (from t1)</li>
<li>item2 (from t1)</li>
<li>item3 (from t1)
<ul>
<li>item1 (from t2 where id1 -> item3)</li>
<li>item2 (from t2 where id1 -> item3)</li>
</ul>
</li>
<li>item4 (from t1)</li>
...
</ul>
我想做这个服务器端,但也欢迎任何建议使用CSS。非常感谢你的时间。
汤姆我将参考这个站点通过PHP打印出SQL查询的结果:
http://www.siteground.com/tutorials/php-mysql/display_table_data.htm至于SQL查询,您建议的查询与您想要的输出不匹配,因为建议的HTML列表有3个从table1请求的项目,但您建议的table1只有2个项目。
也许看起来像这样?
SELECT T1.id1, T1.name1, T2.id2, T2.name2
FROM dbo.table1 as T1 LEFT OUTER JOIN dbo.table2 as T2 ON T1.Id1 = T2.Id1
这将给您一个"网格"输出,可以被PHP读取并格式化为列表,如您所建议的。它实际上只有4列,因为5列中有一列是多余的。
好了,我知道了:
查询为:
SELECT name1,name2
FROM Table1 left join Table2 on Table1.id1=Table2.id1
ORDER by Table1.id
id1 = Table1.id1
下面是生成html列表的PHP代码:echo "<ul>";
$a =""; // helpers
$b = 0;
while($row = mysqli_fetch_array($result)) {
if (isset($row['name2']) and $row['name1'] != $a and $b == 0) {
echo "<li>".$row['name1']."<ul>";
echo "<li>".$row['name2']."</li>";
$a = $row['name1'];
$b = 1;
}
elseif (isset($row['name2']) and $row['name1'] == $a and $b == 1) {
echo "<li>".$row['name2']."</li>";
}
elseif (isset($row['name2']) and $row['name1'] != $a and $b == 1) {
echo "</ul>";
echo "<li>".$row['name1']."<ul>";
echo "<li>".$row['name2']."</li>";
$a = $row['name1'];
$b = 1;
}
elseif (!isset($row['name2']) and $row['name1'] !=$a and $b == 1) {
echo "</ul>";
echo "<li>".$row['name1']."</li>";
$a = $row['name1'];
$b = 0;
}
else {
echo "<li>".$row['name1']."</li>";
$a = $row['name1'];
$b = 0;
}
}
echo "</ul>";
再补充一点,没有name 1就没有name2 name 1也没有name2