1

答えについては、この質問の一番下に移動してください

現在、基本的にユーザーを行ごとにリストするテーブル出力の作成に取り組んでいます。テーブル出力の列は、1 つの特定の SQL 列によって入力されますが、複数の行から入力されます (たとえば、John Smith には 4 つの行がありますが、列 X はこのテーブルの各行で異なる値を持っています)。

より多くのコンテキストを提供するために、これは現在のテーブルの状態をテキストで表現したものです。

Name  |  Col1  |  Col2  |  Col3
---------------------------------
Name1 |   0    |   X    |   1

Name2 |   3    |   2    |   <--- Value missing

Name3 |   2    |   1    |   <--- Value missing (and this continues through the table..

そのテーブルでわかるように、最初の行は正常に入力されますが、その後の残りの行はデータの反復を無視しているように見えます (したがって、残りの行は 2 列しか埋めません.

ループに関連するコードは次のとおりです。

while ($row = mysql_fetch_assoc($result)) {

    echo "<tr><td>". $row['forename'] . "</td>
      <td>". $row['status'] ."</td>";

             while ($col = mysql_fetch_assoc($result)) {

                 if ($col['id'] == $row['id']) {

                     echo "<td>" . $col['status'] . "</td>";

                 }

                 else if ($col['id'] != $row['id']){
                     echo "</tr>";
                     break;
                 }
             }
}

なぜこれが起こっているのかについて誰か考えがありますか? 十分な情報を提供したことを願っていますが、そうでない場合はお知らせください。:)

4

3 に答える 3

0

あなたのコードを見て、私は調整を提案することができます。

mysql_fetch_assoc($result)内側のループを呼び出すことによりWHILE、結果オブジェクト内のポインターを移動します(意図的ではありませんが)。

代わり$rowに、最初のループで取得した配列を使用する必要があります。

私が見ることができるように本当に比較を行う必要がある場合、最善の策は、最初に個々のレコードを配列に配置して結果セット全体を実行し、次に次のようにループで使用できるようにすることです。

$records = array();
//array to hold the retrieved records from the database
while($row = mysql_fetch_assoc($result)){
    //loop through the data
    $records[] = $row;
}
//continue with your processing, this time using $records as your result set
//an looping through it this time as an array -- you don't need mysql_fetch_assoc
.....

幸運を!

于 2012-05-31T13:55:35.857 に答える
0

Okekes のアイデアを拡張して (歓声) 別の方法でそれを行うように修正しましたが、これは非常にうまく機能します!

//declare new array variable
                $resultSet[] = array();

                //set offset integer
                $i = 0;

                //While loop to return all rows from query, and place into multi dimensional array format
                while ($row = mysql_fetch_assoc($result)) {
                    $resultSet[$i] = $row;
                    $i++;
                }

                //check that the array isn't empty
                if ($resultSet) {

                    $innerCount = "0";

                    //count how many rows are in the array
                    $rowCount = count($resultSet);

                    //loop through the array, each row, then go through inner loop for columns
                    for ($row = 0; $row < $rowCount; $row=$row+$numRows) {

                        //declare variables for the row data
                        $foreName = $resultSet[$row]['forename'];
                        $surName = $resultSet[$row]['surname'];

                        echo "<tr><td>" . $foreName . " " . $surName . "</td>";

                        for ($col = $row; $col < $rowCount; $col++) {

                            if ($innerCount < $numRows) {

                            $innerCount++;
                            $currStatus = $resultSet[$col]['status'];
                            echo "<td>" . $currStatus . "</td>";

                            }

                            else {

                                echo "</tr>";
                                $innerCount = "0";
                                break;
                            }

                        }
                    }
                }
于 2012-06-12T21:17:53.620 に答える
0
if ($col['id'] == $row['id'])
{
     make a td
}

問題は時々 $col['id'] != $row['id'] だと思います

于 2012-05-31T13:46:14.447 に答える