我的数据库中有两个表:
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的任何建议。 非常感谢你的时间。
汤姆
答案 0 :(得分:0)
我会引用此站点通过PHP打印出SQL查询的结果:
http://www.siteground.com/tutorials/php-mysql/display_table_data.htm
对于SQL查询,您建议的查询与您想要的输出不匹配,因为建议的HTML列表有来自table1的3个项目,但您建议的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
那会给你一个&#34;网格&#34;输出可以由PHP读取并格式化为列表,如您所建议的那样。它实际上只有4列,因为其中一个是多余的。
答案 1 :(得分:0)
好吧,我现在明白了:
查询是:
SELECT name1,name2
FROM Table1 left join Table2 on Table1.id1=Table2.id1
ORDER by Table1.id
表2中的id1是外键= Table1.id1
然后是这个PHP代码生成html列表:
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>";
只是要补充一点,没有名称1没有名称2,名称1就没有名称2。