0

何か間違ったことをしているのだろうか、それともこれは MySQL ですべてが処理される方法の単なる癖なのだろうかと思っています。セットアップは次のとおりです:(この正確なトピックは他のどこにも見つからないようです)

ordermenuの 2 つのテーブルがあります。

menuには、各行にid' (アイテム)、'item'、および 3 つの価格 ('prc1' 'prc2'prc3

menu +----+----------+------+------+------+
     |'id'|  'item'  |'prc1'|'prc2'|'prc3'|
     +----+----------+------+------+------+
     |  1 | 'tshirt' | 3.00 | 4.50 | 4.00 |
     |  2 | 'socks'  | 1.00 | 2.50 | 2.00 |
     +----+----------+------+------+------+

orderには、注文メニューと照合するアイテム ID ('i_id') と、後で PHP で価格をフィルタリングするために使用する整数 ('prc_id') もあります。

order +------+--------+
      |'i_id'|'prc_id'|
      +--------+------+
      |  1   |   1    | # i_id matches id - tshirt and informs to use prc1
      |  2   |   3    | # i_id matchis id - socks and uses prc3
      +--------+------+

JOIN を使用して注文とアイテムを一致させます

"SELECT order.prc_id, menu.item, menu.prc1, menu.prc2, menu.prc3
        FROM order 
        LEFT JOIN menu 
        ON order.i_id = menu.id"

次に、結果を取得し、最初にすべてがパンアウトされていることを確認するために、配列を出力しました。

$result = mysql_query($query)
while($row = mysql_fetch_array($result))
    {
        print_r($row);
    }

これは私が返す配列です(明らかに初期テストのダミー情報です):

Array 
 ( 
    [0] => 1 [prc_id] => 1         #the value (1) for 'prc_id' is given twice
    [1] => tshirt [item] => tshirt #the value (tshirt) for 'item' is given twice
    [2] => 3.00 [prc1] => 3.00     #the value (3.00) for 'prc1' is given twice
    [3] => 4.50 [prc2] => 4.50     #etc
    [4] => 4.00 [prc3] => 4.00

    [0] => 3 [prc_id] => 3
    [1] => socks [item] => socks
    [2] => 1.00 [prc1] => 1.00 
    [3] => 2.50 [prc2] => 2.50 
    [4] => 2.00 [prc3] => 2.00
 )

私の質問です (最後に、そうですか? xD)...配列の応答で重複データが返されるのはなぜですか?

私は何か間違ったことをした?私は何かを見落としていますか?

それは大きな問題ではありません。最終結果には影響しません。できるだけ正確にしたいだけです。

お時間をいただきありがとうございます。:)

4

2 に答える 2

1

これがPHPのprint_r()問題だと思うなら。

print_r()数値表現を返し、2番目は名前付きストア行を返します。

編集:

データベースクエリツールを使用してクエリを試してみると、元の結果が表示されます。

于 2011-01-19T07:48:10.917 に答える
-1
     SELECT order.prc_id, menu.item, menu.prc1, menu.prc2, menu.prc3
     FROM order
      LEFT JOIN menu
      ON order.i_id = menu.id

item_idinorderidofに基づいて参加しているように見えますがmenu、(私が正しく理解していれば) item_idofに基づいて行う必要がありますmenu

何かのようなもの:

     SELECT order.prc_id, menu.item, menu.prc1, menu.prc2, menu.prc3
     FROM order
      LEFT JOIN menu
      ON order.i_id = menu.item_id
于 2011-01-19T06:14:27.357 に答える