-2

以下のコードで2つの異なるmysqlテーブルをループさせたいと思います。外側のwhileループは、製品のリストを出力する必要があります。各テーブル行は新しい製品です。内側のwhileループは、その製品の各列変数を出力する必要があります。内側のループは、印刷する列のガイダンスとして$tableheadersを参照するように設定されています。

内側のループは、外側のループ配列のコンテンツを含むテーブルセルをエコーアウトし、内側のループ配列は、外側の配列のどの列を参照するかを指定します。

これが私のコードです。

$tableheaders=mysql_query("SELECT * from `winetable`");

$products=mysql_query("SELECT * FROM `wines`");

while ($row=mysql_fetch_assoc($products)){
    echo '<tr>';
            while ($rowi=mysql_fetch_assoc($tableheaders)){
            $column=$rowi['Title'];
            echo '<td>';
            echo $row[$column];
            echo '</td>';
        }
    echo '</tr>';
    }

それがするのは空白になることだけです。

私のWebMatrixでmySQLiの使用に問題が発生したため、現在mySQLiを使用していません。私のMySQLインストールは壊れていると思います:)

4

3 に答える 3

0

次のコードを読んで、コードをデバッグする方法を確認してください。また、mysql_data_seek()を使用して配列の1つをリセットする必要があることに気付きました。

$tableheaders=mysql_query("SELECT * from `winetable`");
$products=mysql_query("SELECT * FROM `wines`");

//check the number of results before looping
if(mysql_num_rows($tableheaders) > 0 && mysql_num_rows($products) > 0){

    while ($row=mysql_fetch_assoc($products)){
        echo '<tr>';

        //check what is in the array
        var_dump($row);

        while ($rowi=mysql_fetch_assoc($tableheaders)){

            //check what is in the array
            var_dump($rowi);

            $column=$rowi['Title'];
            echo '<td>';
            echo $row[$column];
            echo '</td>';
        }
        echo '</tr>';

        //reset the $tableheaders array pointer back to 0 for next loop
        mysql_data_seek($tableheaders, 0);
    }
}
于 2013-03-24T21:08:44.097 に答える
0

このようなことを試してください。これを行うには、最初に結果を配列にロードし、さらに操作して、いつでも再利用できます...

<?php

$t = mysql_query("SELECT * FROM `winetable`");
$p = mysql_query("SELECT * FROM `wines`");

if(mysql_num_rows($p) > 0 && mysql_num_rows($t) > 0){
    while ($row=mysql_fetch_assoc($p)){
        $products[] = $row
    }

    while ($row=mysql_fetch_assoc($t)){
        $tableheaders[] = $row;
    }

    foreach($products as $i => $product){ ?>

    <tr><?php
    foreach($tableheaders as $j => $tableheader){
        ?>

        <td><?php echo $row[$tableheader['Title']]; ?></td><?php
    }   
    ?>

    </tr><?php
    }
}

?>
于 2013-03-24T21:24:33.657 に答える
0

あなたのコードを見て、私はあなたが持っていない<table></table>含まれていないことに気づきました(たぶんあなたは持っていますが、それはあなたの質問に表示されません)。それと同じくらい簡単でしょうか?<table>一部のブラウザ(つまり、私が思うに)は、これらのタグがない場合、テーブルを表示しません。

含む

echo '<table>';

最初のループの前

echo '</table>';

コードの最後(ループの後)

htmlsourceに何か情報がありますか?

ヒント ワインに関する情報を収集する別のアプローチを試してみます...必要なテーブルと出力情報の両方を含むレコードセットを作成することです。これにより、速度が劇的に向上し、読みやすいコードが追加されます。

何かのようなもの:

SELECT * FROM `wines` w LEFT JOIN `winetable` wt ON (w.id = wt.id)

そしてもちろん、Theo Kouzelisが述べたように、mysql_functionsは使用しないでください。

于 2013-03-24T21:30:28.100 に答える