1

私のmysqlテーブルは次のようになります。 ここに画像の説明を入力

House_NR なしで、3 レベルのツリーを作成する必要があります。

-Country
 |--City 1
 |  |--Street 1
 |  |--Street 2
 |
 |--City 2
 |--City 3
 |  |--Sreet 1
 |  |--Steet 2

PHP では、次の SQL クエリを作成します。

SELECT
    l.Country_ID,
    c1.Name AS Country_Name,
    l.City_ID,
    c2.Name AS City_Name,
    l.Street_ID,
    s.Name AS Street_Name,
    l.House_NR
FROM Location l
JOIN Country c1 ON c1.id = l.Country_ID
JOIN City c2 ON c2.id = l.City_ID
JOIN Street s ON s.id = l.Street_ID

そして、私はこの機能を持っています:

function getTree($data) {
    $tree = prepareTree($data);
    drawTree($tree);
}

function prepareTree($data) {
    $nodeList = array();
    $tree = array();

    foreach ($data as $key) {
        $tree[$key["Country_ID"]]["name"] = $key["Country_Name"];
        $tree[$key["Country_ID"]]["id"] = $key["Country_ID"];
        $tree[$key["Country_ID"]]["level"] = 1;

        $tree[$key["Country_ID"]]["children"][$key["City_ID"]]["name"] = $key["City_Name"];
        $tree[$key["Country_ID"]]["children"][$key["City_ID"]]["id"] = $key["City_ID"];
        $tree[$key["Country_ID"]]["children"][$key["City_ID"]]["level"] = 2;

        $tree[$key["Country_ID"]]["children"][$key["City_ID"]]["children"][$key["Street_ID"]]["name"] = $key["Street_Name"];
        $tree[$key["Country_ID"]]["children"][$key["City_ID"]]["children"][$key["Street_ID"]]["id"] = $key["Street_ID"];
        $tree[$key["Country_ID"]]["children"][$key["City_ID"]]["children"][$key["Street_ID"]]["level"] = 3;
    }

    return $tree;
}

function drawTree($data, $sub = false) {
    echo ($sub) ? "<ul class=\"tree-listCat\">" : "<ul class=\"tree-list\">";

    foreach($data as $key) {
        if ($key["children"] != null) {
            echo "<li class=\"tree-itemCat\"><span class=\"tree-itemSel\"><a href=\"switch.php?action=search&type=tree&level=" . $key["level"] . "&id=" . $key["id"] . "\">" . $key["name"] . "</a></span></li>";
            drawTree($key["children"], true);
        } else
            echo "<li class=\"tree-item\"><span class=\"tree-itemSel\"><a href=\"switch.php?action=search&type=tree&level=" . $key["level"] . "&id=" . $key["id"] . "\">" . $key["name"] . "</a></span></li>";
    }

    echo "</ul>";
}

この関数は正常に動作しますが、関数がツリーの html バージョンを描画する関数にいくつかの問題があります
action=search&type=tree&level=" . $key["level"] . "&id=" . $key["id"]

子なしの国action=search&type=tree&country=id
のみの場合 子ストリートなしの国と都市のみのaction=search&type=tree&country=id&city=id
場合 すべての引数が国、都市、およびスティの場合action=search&type=tree&country=id&city=id&street_id=id

また、関数の準備ツリーも見栄えが悪いです(私の考えでは)。簡単に言えば、データベースからツリーを作成する必要がありLocationます。

4

0 に答える 0