0

私はこれに永遠のように取り組んできたので、ついに助けを求めることにしました。mysqlデータベースにinfoが入力されたhtmlリストを書き込もうとしています。これを実現するために、phpループ(または複数のループ)を作成しようとしています。リストに複数のノードがあるため、複雑になり始めます。私は多くの異なる方法を試しましたが、望ましい結果を得ることができません。どんな助けでも大歓迎です!

リストには、さまざまな「カテゴリ」と「サブカテゴリ」を持つアイテムが表示されます。リストは、顧客名、カテゴリ、サブカテゴリ、部品番号の順にASCで並べる必要があります。一部のアイテムにはカテゴリのみがあり、サブカテゴリはありません。一部のアイテムにはカテゴリがなく、顧客の名前の下にリストする必要があります。したがって、リストは次のようになります...

Customer1
    -Category1
        -Subcategory1
                -Part1(カテゴリとサブカテゴリのあるアイテム)-Part2         -Subcategory2                 -Part3     -Category2         -Part4(カテゴリのみのアイテム)
                -Part5         -     Part6(カテゴリまたはサブカテゴリのないアイテム     -Part7 Customer2     -Category1         -Subcategory1                 -パート1(カテゴリとサブカテゴリのあるアイテム)                 -         パート2-サブカテゴリ2-パート                 3














等......

うまくいけば、それは十分に明確です。

これがこの問題に対する私の最初の試みであり、それは近づいています。アイテムを間違った場所に配置するだけです(理由はわかりません)。

    <?php
    $con = mysql_connect("localhost:3306","root","");
    if (!$con)
    {
        die('Could not connect: ' . mysql_error());
    }

    mysql_select_db("pcu_ops", $con);

    $sql_customer="SELECT DISTINCT customer FROM common_parts ORDER BY customer ASC";

    $result_customer=mysql_query($sql_customer,$con);

    if (!mysql_query($sql_customer,$con))
    {
        die('Error: ' . mysql_error());
    }
?>
<table border="0">
    <colgroup>
        <col width="300px" valign="top">
        <col width="90%">
    </colgroup>
    <tr>
        <td valign="top">
            <!-- Add a <div> element where the tree should appear: -->
            <div id="common_parts_tree">
                <ul>
                    <?php
                        while ($row_customer = mysql_fetch_array($result_customer)) {
                            echo '<li class="expanded folder">'.$row_customer['customer'];
                                echo '<ul>';
                                    $customer=$row_customer['customer'];
                                    $sql_category="SELECT DISTINCT category FROM common_parts WHERE customer='$customer' ORDER BY customer ASC";
                                    $result_category=mysql_query($sql_category,$con);
                                    if (!mysql_query($sql_category,$con)) {
                                        die('Error: ' . mysql_error());
                                    }
                                    while ($row_category = mysql_fetch_array($result_category)) {
                                        if ($row_category['category'] != '') {
                                            echo'<li class="expanded folder">'.$row_category['category'];
                                                echo '<ul>';
                                                    $category=$row_category['category'];
                                                    $sql_subcategory="SELECT DISTINCT subcategory FROM common_parts WHERE (customer='$customer' AND category='$category') ORDER BY subcategory ASC";
                                                    $result_subcategory=mysql_query($sql_subcategory,$con);
                                                    if (!mysql_query($sql_subcategory,$con)) {
                                                        die('Error: ' . mysql_error());
                                                    }
                                                    while ($row_subcategory = mysql_fetch_array($result_subcategory)) {
                                                        if ($row_subcategory['subcategory'] != '') {
                                                            echo'<li class="expanded folder">'.$row_subcategory['subcategory'];
                                                                echo '<ul>';
                                                                    $subcategory=$row_subcategory['subcategory'];
                                                                    $sql_pn="SELECT DISTINCT pn FROM common_parts WHERE (customer='$customer' AND category='$category' AND subcategory='$subcategory') ORDER BY pn ASC";
                                                                    $result_pn=mysql_query($sql_pn,$con);
                                                                    if (!mysql_query($sql_pn,$con)) {
                                                                        die('Error: ' . mysql_error());
                                                                    }
                                                                    while ($row_pn = mysql_fetch_array($result_pn)) {
                                                                        $pn=$row_pn['pn'];
                                                                        echo '<li><a href="includes/phpscripts/part_quick_view.php?pn='.$pn.'&customer='.$customer.'" target="contentFrame">'.$pn.'</a>';
                                                                    }
                                                                echo '</ul>';
                                                        }
                                                        else {
                                                            if ($row['subcategory'] == '') {
                                                                $sql_pn="SELECT DISTINCT pn FROM common_parts WHERE (customer='$customer' AND category='$category') ORDER BY pn ASC";
                                                                $result_pn=mysql_query($sql_pn,$con);
                                                                if (!mysql_query($sql_pn,$con)) {
                                                                    die('Error: ' . mysql_error());
                                                                }
                                                                while ($row_pn = mysql_fetch_array($result_pn)) {
                                                                    $pn=$row_pn['pn'];
                                                                echo '<li><a href="includes/phpscripts/part_quick_view.php?pn='.$pn.'&customer='.$customer.'" target="contentFrame">'.$pn.'</a>';
                                                                }
                                                            }
                                                        }
                                                    }
                                                echo '</ul>';
                                        }
                                        else {
                                            echo '<li><a href="includes/phpscripts/part_quick_view.php?pn='.$pn.'&customer='.$customer.'" target="contentFrame">'.$pn.'</a>';
                                        }
                                    }
                                echo '</ul>';
                        }
                    ?>
            </div>
        </td>
        <td>
            <iframe src="" name="contentFrame" width="100%" height="500" scrolling="yes" marginheight="0" marginwidth="0" frameborder="0">
                <p>Your browser does not support iframes</p>
            </iframe>
        </td>
    </tr>
    <tr>
        <td colspan="2">
            <center>
                <form id="rcv_common_parts">
                <input type="hidden" id="pn" name="pn"/>
                <input type="hidden" id="customer" name="customer"/>
                <table class="table">
                    <tr>
                        <td>Quantity to Receive:</td>
                        <td><input type="text" name="qty" /></td>
                    </tr>
                </table>
                </form>
            </center>
        </td>
    </tr>
</table>

これは私の最近の試みです。私は最初の方法をあきらめて、このファイルを試し始めました。まだ運がありません。

<?php
    $con = mysql_connect("localhost:3306","root","");
    if (!$con)
    {
        die('Could not connect: ' . mysql_error());
    }

    mysql_select_db("pcu_ops", $con);

    $sql="SELECT * FROM common_parts ORDER BY customer ASC, category ASC, subcategory ASC, pn ASC";

    $result=mysql_query($sql,$con);

    if (!mysql_query($sql,$con))
    {
        die('Error: ' . mysql_error());
    }
?>
<table border="0">
    <colgroup>
        <col width="300px" valign="top">
        <col width="90%">
    </colgroup>
    <tr>
        <td valign="top">
            <!-- Add a <div> element where the tree should appear: -->
            <div id="common_parts_tree">
                <ul>
                    <?php
                        $row = mysql_fetch_array($result);
                            echo '<li class="expanded folder">'.$row['customer'];
                                echo '<ul>';
                                    while (($row['category'] != NULL) && ($row['subcategory'] != NULL)) {
                                        echo '<li class="expanded folder">'.$row['category'];
                                            echo '<ul>';
                                                echo '<li class="expanded folder">'.$row['subcategory'];
                                                    echo '<ul>';
                                                        echo '<li><a href="includes/phpscripts/part_quick_view.php?pn='.$row['pn'].'&customer='.$row['customer'].'" target="contentFrame">'.$row['pn'].'</a>';
                                                    echo '</ul>';
                                            echo '</ul>';
                                    }
                                echo '</ul>';
                    ?>
            </div>
        </td>
        <td>
            <iframe src="" name="contentFrame" width="100%" height="500" scrolling="yes" marginheight="0" marginwidth="0" frameborder="0">
                <p>Your browser does not support iframes</p>
            </iframe>
        </td>
    </tr>
    <tr>
        <td colspan="2">
            <center>
                <form id="rcv_common_parts">
                <input type="hidden" id="pn" name="pn"/>
                <input type="hidden" id="customer" name="customer"/>
                <table class="table">
                    <tr>
                        <td>Quantity to Receive:</td>
                        <td><input type="text" name="qty" /></td>
                    </tr>
                </table>
                </form>
            </center>
        </td>
    </tr>
</table>

誰かが助けてくれることを願っています!

ありがとう!

4

3 に答える 3

0

最初に投稿したコードは問題ないように見えましたが、長すぎて理解できませんでした。基本的に必要なのは、すべてのカテゴリ、サブカテゴリなどのwhileループ内のwhileループなどです。

データベースの構造がわからないため、列名の一部を変更する必要があるかもしれませんが、それ以外は機能するはずです。

$query1 = "the customer query";
while($customerRow = mysql_fetch_array(mysql_query($query1,$con))) {
    echo '<ul><li>';
    echo $customerRow['customer'];
    $query2 = "the category query";
    while($categoryRow = mysql_fetch_array(mysql_query($query2,$con))) {
        echo '<ul><li>';
        echo $categoryRow['category'];
        $query3 = "the subcategory query";
        while($subcategoryRow = mysql_fetch_array(mysql_query($query3,$con))) {
            echo '<ul><li>';
            echo $subcategoryRow['subcategory'];
            echo '</li></ul>';
        }
        echo '</li></ul>';
    }
    echo '</li></ul>';
}
于 2012-05-13T05:22:19.060 に答える
0

再帰的アルゴリズムを実装する必要があります。

データベースのヒント...カテゴリとパーツのみの簡単な例:

-カテゴリ1
        -サブカテゴリ1
                - パート1
                - パート2
        -サブカテゴリ2
                -パート3
    -カテゴリ2
        -サブカテゴリ3
                -パート4
        -パート5
        -パート6
    -パート7
    -パート8
categories_table
ID名親user_id
1カテゴリ101
2カテゴリー201
3サブカテゴリ111
4サブカテゴリ211
5サブカテゴリ321
Parts_table
名前のカテゴリ
パート13
パート23
パート34
パート45
パート52
パート62
パート70
パート80

あなたはポイントを得る...

それからショーのために:

 $query_user = mysql_query("select * from users",$con);
while($row_user = mysql_fetch_array($query_user)) {
    echo "<ul>".$row_user['id'];
    show_category($row_user['id'],0);
    echo "</ul>";
}
function show_category($user,$parent){
    global $con;
    echo "<ul>";
    $query_cat = mysql_query("select * from categories where user_id=".$user." and parent=".$parent,$con);
    while($row_cat = mysql_fetch_array($query_cat)) {
        echo "<li>".$row_cat['name'];
        show_category($user,$row_cat['id']);
        echo "</li>";       
    }
    $query_parts = mysql_query("select * from parts where category=".$parent,$con);
    while($row_parts = mysql_fetch_array($query_parts)) {
        echo "<li>".$row_parts['name']."</li>";
    }
    echo "</ul>";
}
于 2012-05-13T06:06:37.430 に答える
0

これは長い答えになるでしょうが、私はあなたを助けることができると思います。まず、データベースのセットアップ方法について、いくつかのことを簡単に説明しましょう。私はあなたの例が「顧客」と言っていることを知っていますが、以下の私の例ではそれらを「ユーザー」と呼びます:

1)ユーザーテーブルがあります。そのテーブルには、int 11、主キー、自動インクリメントである「id」フィールドが必要です。より多くのフィールドがありますが、私が関わっているのは「id」だけです。
2)カテゴリが「親」カテゴリであるか「子」カテゴリであるかを判断するには、「カテゴリ」テーブルが必要です。構造は基本的に「id」(int 11、主キー、自動インクリメント)、「name」(varchar)、「user_id」(int 11)、「parent_id」(int 11)のようなものでなければなりません。上記の要件では、カテゴリ1、カテゴリ2などは「親」カテゴリであるため、parent_idは0であり、親がないことを意味します。サブカテゴリの場合は、サブカテゴリであるカテゴリのIDを使用する必要があります。たとえば、カテゴリ1のIDが1の場合
3)最後にパーツテーブルがあります。ここでも、「id」(int 11、主キー、自動インクリメント)、「user_id」(int 11)、および「category_id」(int 11)があります。明らかに他のフィールドをここに置くことができますが、それらは私が関わっている3つです。パーツがカテゴリにない場合、category_idは0です。それ以外の場合は、カテゴリまたはサブカテゴリのIDを使用します。

これにより、ユーザー、カテゴリ、およびパーツの関係をマッピングするための適切なデータベース構造が得られます。では、どのようにしてすべてのデータを使用可能なものに変換しますか?配列。必要なデータを表示するのに役立つ連想配列を作成します。百万行のPHPを書かずに、ここに要点があります。

$arr_user = array();
$sql = mysql_query('SELECT * FROM users ORDER BY name ASC', $con);
while($user = mysql_fetch_object($sql))
{
    $arr_user[$user->id]['name'] = $user->name;
    $sql2 = mysql_query('SELECT * FROM parts WHERE user_id='.$user->id.' AND category_id=0 ORDER BY name ASC', $con);
    while($part = mysql_fetch_object($sql2))
    {
        $arr_user[$user->id]['parts'][$part->id] = $part->name;
    }
    $sql3 = mysql_query('SELECT * FROM categories WHERE user_id='.$user->id.' AND parent_id=0 ORDER BY name', $con);
    while($category = mysql_fetch_object($sql3))
    {
        $sql4 = mysql_query('SELECT * FROM parts WHERE user_id='.$user->id.' AND category_id='.$category->id.' ORDER by name', $con);
        while($part = mysql_fetch_object($sql4))
        {
            $arr_user[$user->id]['category'][$category->id]['name'] = $category->name;
            $arr_user[$user->id]['category'][$category->id]['parts'][$part->id] = $part->name;
        }
        $sql5 = mysql_query('SELECT * FROM categories WHERE parent_id='.$category->id.' ORDER BY name', $con);
        while($subcat = mysql_fetch_object($sql5))
        {
            $sql6 = mysql_query('SELECT * FROM parts WHERE category_id='.$subcat->id.' ORDER BY name', $con);
            while($part = mysql_fetch_array($sql6))
            {
                $arr_user[$user->id]['category']['subcat'][$subcat->id]['name'] = $subcat->name;
                $arr_user[$user->id]['category']['subcat'][$subcat->id]['parts'][$part->id] = $part->name;
            }
        }
    }
}

if( sizeof( $arr_user ) )
{
    foreach( $arr_user as $k=>$v )
    {
        echo $v['name']; //echo the user's name
        if( isset( $v['category'] ) && sizeof( $v['category'] ) )
        {
            foreach( $v['category'] as $ck=>$cv )
            {
                echo $cv['name']; //echo category name
                if( isset( $cv['subcat']) && sizeof( $cv['subcat'] ) )
                {
                   foreach( $cv['subcat'] as $sk=>$sv )
                   {
                       echo $sv['name']; //echo subcat name
                       if( isset( $sv['parts'] ) && sizeof( $sv['parts'] ) )
                       {
                           foreach( $sv['parts'] as $spk=>$spv )
                           {
                               echo $spv; //echo part name
                           }
                       }
                   }
                }
                if( isset($cv['parts']) && sizeof($cv['parts']) )
                {
                    foreach( $cv['parts'] as $cpk=>$cpv )
                    {
                        echo $cpv; //echo part name
                    }
                }
            }
        }
        if( isset($v['parts']) && size($v['parts']) )
        {
            foreach( $v['parts'] as $pk=>$pv )
            {
                echo $pv;
            }
        }
    }
}
于 2012-05-13T07:50:24.113 に答える