0

私は社会的なプロジェクトに取り組んでおり、メンバーの登録を開始したところです。私たちのメンバーは新しいメンバーを募集することができるので、フィールド「recruit_by」であるデータベースがあります。

DB フィールドは次のようになります。

id | name | email | code | recruit_by

ここで、すべてのレベルで誰が誰を採用したかという構造のリストを生成したいと考えています。

私はこれを成し遂げようとしましたが、これを成し遂げるには私のスキルが不足しているようです。リストを取得しますが、これはまったくソートされていません:-(

ご協力いただきありがとうございます!

<?PHP

mysql_connect("www.mysqlserver.net", "database1", "password") or die(mysql_error());
mysql_select_db("project_db1") or die(mysql_error());

echo "<ul>";

$result = mysql_query("SELECT * FROM registration") or die(mysql_error());
while($row = mysql_fetch_array($result))
    {
    echo "<li class=\"level0\">" . $row['id'] . " - " . $row['name'] . " - " . $row['email'] . " - " . $row['recruit_by'] . "</li>";

    // 1. Level
    $result2 = mysql_query("SELECT * FROM registration WHERE recruit_by LIKE " . $row['id']) or die(mysql_error());
    while($row2 = mysql_fetch_array($result2))
        {
        echo "<li class=\"level1\">1. " . $row2['id'] . " - " . $row2['name'] . " - " . $row2['email'] . " - " . $row2['recruit_by'] . "</li>";

        // 2. Level
        $result3 = mysql_query("SELECT * FROM registration WHERE recruit_by LIKE " . $row2['id']) or die(mysql_error());
        while($row3 = mysql_fetch_array($result3))
            {
            echo "<li class=\"level2\">2. " . $row3['id'] . " - " . $row3['name'] . " - " . $row3['email'] . " - " . $row3['recruit_by'] . "</li>";

            // 3. Level
            $result4 = mysql_query("SELECT * FROM registration WHERE recruit_by LIKE " . $row3['id']) or die(mysql_error());
            while($row4 = mysql_fetch_array($result4))
                {
                echo "<li class=\"level3\">3. " . $row4['id'] . " - " . $row4['name'] . " - " . $row4['email'] . " - " . $row4['recruit_by'] . "</li>";

                // 4. Level
                $result5 = mysql_query("SELECT * FROM registration WHERE recruit_by LIKE " . $row4['id']) or die(mysql_error());
                while($row5 = mysql_fetch_array($result5))
                    {
                    echo "<li class=\"level4\">4. " . $row5['id'] . " - " . $row5['name'] . " - " . $row5['email'] . " - " . $row5['recruit_by'] . "</li>";

                    }

                }

            }

        }

    }

echo "</ul>";

?>
4

1 に答える 1

1

最初に、すべての登録を選択しているため、recued されたすべてのユーザーも結果として表示されます。このユーザーが採用されていない場合は、recruit_by が NULL であると仮定して、採用されていないユーザーのみを選択することをお勧めします。

$result = mysql_query("SELECT * FROM registration WHERE recruit_by IS NULL") or die(mysql_error());

次に、次のように別の <ul></ul> タグで第 2 レベルの新兵を構成することをお勧めします。

<ul>
    <li>User #1
        <ul>
            <li>User #103, recruited by user #1</li>
            <li>User #142, recruited by user #1</li>
            <li>User #93, recruited by user #1
                <ul>
                    <li>User #992, recruited by user #93</li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

これにより、作業するためのより優れた構造がすでに提供されており、PHP コードで簡単にループできます (DRY - 繰り返さないでください)。

<?php


function createTree($level = 0, $recruiter_id = 0) {

    $return = "";
    if (!$recruiter_id) {
        $results = mysql_query("SELECT * FROM registration WHERE recruit_by IS NULL") or die(mysql_error());
    } else {
        $results = mysql_query("SELECT * FROM registration WHERE recruit_by LIKE " . $recruiter_id) or die(mysql_error());
    }

    // Check if there is any recruits at all?
    if (pg_num_rows($results) > 0) $return .= "<ul>\n";
    else return "";

    while ($row = mysql_fetch_array($results)) {

        $return .= "<li class=\"level".$level."\">\n";
        $return .= $level.". " . $row['id'] . " - " . $row['name'] . " - " . $row['email'] . " - " . $row['recruit_by']."\n";

        // Add sub-recruits
        $return .= createTree($level+1, $row['id']);

        // Finish up the <li>
        $return .= "</li>\n";

    }

    $return .= "</ul>\n";
    return $return;

}

?>
于 2013-09-19T13:53:19.327 に答える