从两个表创建一个列表


creating a list from two tables

我的数据库中有两个表:

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