2011-01-19 3 views
0

내가 뭔가 잘못하고 있는지, 아니면 이것이 MySQL에서 모든 것이 어떻게 처리되는지에 관한 단점이라면 궁금합니다. 여기 설치는 다음과 같습니다 (I 다른 곳이 정확한 항목을 찾을 수 없습니다) 나는 두 개의 테이블 위해메뉴왜 MySQL은 반환 된 JOIN 배열에 중복 정보를 반환합니까?

. 메뉴

이있는 '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 | 
    +----+----------+------+------+------+ 

위해 또한 주문 메뉴에 대해 일치하는 항목 ID ('i_id'), 내가 PHP에서 나중에 가격을 필터링에 사용하는 정수 ('prc_id')를 가지고있다.

$result = mysql_query($query) 
while($row = mysql_fetch_array($result)) 
    { 
     print_r($row); 
    } 
: I가 그때 확실히 모든 나왔하기 위해 처음에 결과를 다시 얻고,

"SELECT order.prc_id, menu.item, menu.prc1, menu.prc2, menu.prc3 
     FROM order 
     LEFT JOIN menu 
     ON order.i_id = menu.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 
     +--------+------+ 

, 내가 배열을 인쇄

이것은 내가 돌아 오는 배열입니다 (초기 테스트의 경우 분명히 더미 정보 임).

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) ... 중복 데이터가 어레이 응답으로 다시 전송되는 이유는 무엇입니까?

내가 잘못 했나요? 나는 무엇인가 내려다보고 있냐?

큰 문제는 아니지만 제 최종 결과에 영향을 미치지 않습니다. 최대한 정확하게하려고합니다.

감사합니다. 당신이 order에서 item_idmenuid에 따라 합류처럼이에 따라 일을해야하는 동안 (내가 제대로 이해한다면) :

답변

1

경우 이것은 PHP print_r() 문제라고 생각합니다.

print_r()은 숫자 표현을 반환하고 두 번째는 지정된 저장소 행을 반환합니다.

편집 :

은 다음 원래의 결과를 볼 수 데이터베이스 쿼리 도구를 사용하여 검색해보세요.

+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 

그것은 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와 일치합니다. 위의 서식 중 일부를 변경하여 명확하게 설명했습니다. * 적절한 * 데이터를 얻었을 때, 나는 적절한 중복 데이터를 얻는다. [2] => 3.00 [PRC1 =는> 3.00 그것은 인덱스를 반환 [1] => - 셔츠 [항목] => 티셔츠 : 예 1 W/값 : t- 셔츠 인덱스 : 항목/승 val : tshirt ... then 색인 : 2 of 3.00 및 색인 : prc1 w/val : 3.00. 궁금합니다 ... 중복성이 필요한 이유는 무엇입니까? – Squish