1

私はいくつかの mysql テーブル (コンテナごとに 1 つ) を持っています (たとえば、テーブルは containerA と呼ばれます):

Box_ID Box_Name Box_Distributor コンテナ Box_state
======---========---===============---==========-- --=========
1 Box 1 Delivery Comp.1 ContainerA フル
2 Box 2 Delivery Comp.2 ContainerA 空
3 ボックス 3 NULL コンテナ A 欠落

コンテナーのリストを含む別の mysql テーブルがあります。

container_id コンテナ名
============---==============
1A
2B

コンテナの名前と空き箱の数をウェブページに報告したい。

私はそれを行うためにこれを書きました:

    $v1 = 0;
    $sql = "select * from containers";
    $result = mysql_query ($sql) or die(mysql_error());
    while ($row = mysql_fetch_array($result)) 
    { 
        $containers[] = $row[container_name];
        $containerid[] = $row[container_id];

    }

    while ($v1 < 14)
    {

        $containerend = $containers[$v1];
        $containerstart = "container";
        $containername = $containerstart.$containerend;

        $sql = "SELECT COUNT(*) FROM `$containername` WHERE state = 'Empty';";
        $result = mysql_query($sql) or die(mysql_error());
        $count = mysql_fetch_array($result);
        var_dump($containers[$v1]);
        var_dump($count[$v1]);
        $v2 = $v1 + 1;
        $v1 = $v2;

    }

これはコンテナ名のリストで機能しますが、空のボックスの最初の結果しか得られず、残りの配列は NULL として返されます。

文字列(1) "4" NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL

私はここで愚かなことをしていますか?while ループ内の SQL クエリは、各コンテナーのカウントを返す必要がありますか?

どんな助けでも大歓迎です。

4

3 に答える 3

0

これを変える

while ($row = mysql_fetch_array($result)) 
{ 
    $containers[] = $row[container_name];
    $containerid[] = $row[container_id];

}

while ($row = mysql_fetch_array($result)) 
{ 
    $containers[] = $row['container_name'];
    $containerid[] = $row['container_id'];

}

あなたが逃した'

于 2013-02-20T10:40:37.617 に答える
0

私はここで愚かなことをしていますか?

はい。

同じデータを複数のテーブルに分割するのは本当にばかげています。

$sql = "select * from containers";
...
while ($v1 < 14)
{
   ...
   $sql = "SELECT COUNT(*) FROM `$containername` WHERE state = 'Empty';";

リレーショナル データベース管理システムは、結合の実行に非常に優れています。手続き型/オブジェクト指向言語はそうではありません。

すべての containerX テーブルが単一のテーブルにある場合、パフォーマンスが大幅に向上し、コードが大幅に簡素化されます。また、集計テーブルの個々のテーブルのような名前のビューを作成するのは簡単なので、コードの大部分をすぐに書き直す必要がありません。

すべてのコンテナをフェッチしてから、最初の 14 個のみを処理するのはなぜですか?

$v2 は何をしているのですか?

説明がコードと一致しないため、コードが誤動作している理由を突き止めるのはかなり困難です。クエリには「WHERE state = 'Empty'」と記載されていますが、テーブルの説明には state という名前の列がありません (そして、それが正確なレポートである場合、その場合、コードは最初の繰り返しで停止し、MySQL エラー メッセージが表示されます)。

于 2013-02-20T13:46:12.857 に答える
0

$count は本質的に単一の値のみ (単一のコンテナーをカウントしているため) であるため、最初の要素では機能しますが、後続の要素では機能しません。簡単な修正は、mysql_result を使用することです。

$count = mysql_result($result, 0);

いつものように、このコードは、安全ではなく非推奨の mysql 関数を使用しています。mysqli または pdo への切り替えを検討してください。

于 2013-02-20T13:41:13.567 に答える