2011-01-19 14 views
0

私は何か間違っているのか、これがMySQLでどのように処理されているのかちょっとした疑問に思っています。ここでセットアップがあります:(私はどこにもこの正確なトピックを見つけることができないよう)返されたJOIN配列にMySQLが重複した情報を返すのはなぜですか?

私は2つのテーブルためメニューを持っています。メニュー

を有し 'id 'item' 三の価格、(アイテム用)( '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 | 
    +----+----------+------+------+------+ 

順序も注文メニュー( 'i_id ')、及びIは、PHP(' prc_id')の後半の価格をフィルタリングするために使用する整数照合するアイテムIDを有しています。

$result = mysql_query($query) 
while($row = mysql_fetch_array($result)) 
    { 
     print_r($row); 
    } 
:私は、私はその後、必ずすべてが出てパンさせるために最初に戻って結果を取得し、

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

項目に注文を一致させるためにJOINを使用

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 
     +--------+------+ 

は、私は配列を印刷しました

これは私が戻ってくる配列です(最初のテストでは明らかにダミー情報)。

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)...重複したデータがアレイレスポンスに返送されるのはなぜですか?

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

これは大きな問題ではなく、私の最終結果に影響しません。できるだけ正確にしたいと思います。

ありがとうございます。 :)

答えて

1

これはPHP print_r()問題であると考えられる場合。

print_r()戻り値は数値表現で、2番目はストアされたストア行です。

EDIT:

が、あなたは、元の結果が表示されます、データベースクエリツールを使用してクエリを試してみてください。

+0

ハム、ありがとう。 'print_r()'が問題になるかもしれないということも私の頭の中ではわかりませんでした。 私は確かにあることが正当化されたことをコマンドラインから実行しました。解釈がとても奇妙なのは単なる奇妙なことです。再度、感謝します。 :) – Squish

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

あなたがmenuorderitem_ididに基づいて参加しているようにあなたがに基づいてやるべきことながら、(私が正しく理解していれば)それは、menuitem_idに見えます。以下のような

何か:

 SELECT order.prc_id, menu.item, menu.prc1, menu.prc2, menu.prc3 
    FROM order 
     LEFT JOIN menu 
     ON order.i_id = menu.item_id 
+0

私はその商品のIDと一致します。上記のフォーマットのいくつかを変更して、うまくいけば分かりました。私は*適切な*データを取得する、私はちょうど重複した適切なデータを取得します。 例えば: [1] => Tシャツ[商品] => Tシャツ [2] => 3.00 [PRC1] => 3.00 それはインデックスを返す:1W /値:Tシャツ、インデックス:アイテム/ W val:tshirt ...次にインデックス:2の3.00とインデックス:prc1のw/val:3.00。 私は疑問に思っています...なぜ冗長性ですか? – Squish

関連する問題