0

結合された 2 つのテーブルがあり、各テーブルの ID とその下の要素は似ています。

parentID | objectName | subID            ID| className| subName |
_____________________________            ________________________
    84   |   Test     |   14             14|    BOM        |   Test
    84   |   More     |   16             14|    PDF        |   Test
    84   |   Sub      |   15             15|    Schematics |   Test2

関連する要素のカテゴリ名とサブIDを一覧表示したい。いくつかの ObjectName には、いくつかの関連クラスがあります。

PHP コード:

$objects = mysqli_query($con,"SELECT * from subobject");


$join = mysqli_query($con, "SELECT * FROM subrelation AS subrelation INNER JOIN subobject AS subobject ON subobject.subId = subrelation.ID;");

echo "<ul>";
while($obj = mysqli_fetch_array($objects) and $row = mysqli_fetch_array($join))
{

    echo "<li>". $obj['objectName'];

    echo "<ul>";
    //ITERATION GOES HERE
    if($obj['objectName'] == $row['subName'])
        echo "<li>". "$row[className]" . "</li>";

    //END OF ITTERATION
    echo "</ul>";
    echo "</li>";
}   

echo "</ul>";

?>

および出力リスト:

-Test
   -BOM
-Sub
  -Schematics
-More

各フィールドの下には、より多くの値がリストされているはずです。

4

1 に答える 1

1

コードを少し単純化する必要があるようです。私の推測では、各結果セットの行数が異なるため、問題が発生していると思われます。これにより、大きなセットにはまだ多くの要素があるにもかかわらずwhile、小さな結果セット (おそらく ) の処理が完了すると、ループが終了します。$objects

解決策は、クエリの結果を並べ替え、ループで 1 つの条件のみを使用し、文字列を使用して現在実行中whileの条件を追跡することです。objectName$curr_objectName

$join = mysqli_query($con, 'SELECT * FROM subrelation AS subrelation INNER JOIN subobject AS subobject ON subobject.subId = subrelation.ID ORDER BY subobject.objectName;');

$curr_objectName = '';

echo '<ul>';

while($row = mysqli_fetch_array($join)) {
    $subName = $row['subName'];

    if($subName != $curr_objectName)) {
        if($curr_objectName != '') {
            #close the previous list
            #will be skipped on the first loop iteration
            echo '</ul>';
            echo '</li>'; 
        }

        #start a new list
        $curr_objectName = $subName;

        echo '<li>'. $obj['objectName'];
        echo '<ul>';
    } else {
        echo '<li>'. $row['className'] . '</li>';
    }
}   

echo '</ul>';
于 2013-05-24T16:58:57.040 に答える