2014-03-04 5 views
-1

안녕하세요. 이전에 비슷한 질문을 던졌지 만 문제가 해결되지 않은 것을 깨달았습니다.MySQLi가 2 개의 테이블과 다르게 조인하고 표시합니다.

나는 다음과 같은 코드가 원래 코드의 단지 간단한 예입니다 같은 주요 id로 연결되는 MySQL의 DB, 2 개 테이블이 :

표 :

+-----------------------+ 
| main_id | name | type | 
+-----------------------+ 

표 2 :

+----------------------------------------+ 
| main_id | secondary_id | color | price | 
+----------------------------------------+ 

내가 달성하고자하는 결과는 표 1의 모든 행을 얻을 수 있으며, 각각 하나의 목록에서 모든 예를 들어, 표 2에서 주 ID 행으로 연결 :

표 행 :

+-------------------+ 
| 1 | name1 | type1 | 
| 2 | name2 | type2 | 
| 3 | name3 | type3 | 
+-------------------+ 

표 2 행 :

+----+------+----------+------+ 
| 1 | 23 | red | 500 | 
| 1 | 24 | blue | 600 | 
| 1 | 25 | green | 700 | 
| 2 | 26 | pink | 400 | 
| 2 | 27 | purple | 200 | 
| 3 | 28 | white | 100 | 
+----+------+----------+------+ 

디스플레이 결과 :

<h1 class="1">name1, type1</h1> 
<div class="23">red,500</div> 
<div class="23">red,500</div> 
<div class="24">green,700</div> 

<h1 class="2">name2, type2</h1> 
<div class="25">pink,400</div> 
<div class="26">purple,200</div> 

등등 ... I 잠시 내부 while 루프를 사용했다 루프는 필자에게 필요한 결과를주지 못했다면 MySQL JOIN을 사용하는 것이 좋았지 만 일치하는 ID의 모든 값을 얻었을 때 제목을 표시 할 수 없습니다. 한번 nly 한 다음 그 아래에 관련된 결과를 나열, 누군가 제발 나를 도울 수 있습니까? 당신은 main_id를 사용하지만 코드에서 당신은 단지 ID를 사용하여 설명에서

while($rows = $headings->fetch_array(MYSQLI_BOTH)) 
{ 
    $id = $rows['id']; 
    $conts_q = $mysqli->query("SELECT * FROM `table2` WHERE id='$id'"); 
    $conts_numr = $conts_q->num_rows; 

    if($conts_numr==0) 
    { 
     //Display empty 
    } 
    else 
    { 
     while($row2 = $conts_q->fetch_array(MYSQLI_BOTH)) 
     { 
      //Get details and display 
     } 
    } 
} 
+1

귀하의 검색어를 입력하십시오. – Cfreak

답변

0

:

이 단순화 내가 사용하던 쿼리입니다. 여기에서 실제로 사용하고있는 것이 확실하지 않습니다. 실제 열 이름과 일치하도록 아래 코드를 편집해야합니다. 데이터베이스 열 이름이 실제로 main_id 인 경우, 예를 들어 $ id = $ rows [ 'id'] 인 행은 $ rows [ 'main_id']이어야합니다. 또는 작동하지 않습니다.

while($rows = $headings->fetch_array(MYSQLI_BOTH)) 
{ 
    echo '<h1 class="'.$rows['id'].'">'.$rows['name1'].', '.$rows['type'].'</h1>'; 

    $id = $rows['id']; 
    $conts_q = $mysqli->query("SELECT * FROM `table2` WHERE id='$id'"); 
    $conts_numr = $conts_q->num_rows; 

    if($conts_numr==0) 
    { 
     //Display empty 
    } 
    else 
    { 
     while($row2 = $conts_q->fetch_array(MYSQLI_BOTH)) 
     { 
      if ($row2['id'] == $id) { 
       echo '<div class="'.$row2['secondary_id'].'">'.$row2['color'].', '.$row2['price'].'</div>'; 
      } 
     }//while 
    }//else 
}//while 
+0

내가 작성한 것처럼이 코드는 원래 코드의 단순화 된 예입니다. – durian

+0

당신은 내가 왜 문제가 있었는지, 내가 원했던 ID만을 선택하지 않았기 때문에 쿼리가 이미 처리 했어야 만 [[id]] 행을 다시 $ id와 같게 설명 할 수 있습니까? 오히려 그것들 모두? – durian

+0

첫 번째 줄 - while ($ rows = $ headings ....) - 표 1의 이전 쿼리에서 가져온 것이 아닙니까? 그것은 당신의 코드로 작성된 아니지만 어딘가에 코드에서 그 라인 위의 쿼리가 있어야합니다, 그리고 그것은 table1에서 당겨해야합니다. "SELECT * FROM table1"과 같은 것입니까? 그건 사실이 아닌가? – larsAnders

관련 문제