2013-09-30 2 views
0

두 테이블 인 "inventory"와 "inventory_type"이 있습니다. "inventory"테이블에는 그 이름과 유형이 저장되고 "inventory_type"테이블에는 RAM, CPU 등의 유형 이름과 정렬 순서가 저장됩니다. 전에 JOINS를 사용 해 본 적이 없으며 사용할 유형을 잘 모르겠습니다. 그러나 그 중 아무 것도 다음 코드로 작동하지 않는 것 같습니다.조인을 사용하여 두 개의 테이블 쿼리

아래 코드에서 "인벤토리"가 왼쪽 테이블이되거나 "inventory_type"이 왼쪽에 결합됩니까?

function getInventoryOptions($db, $default_value, $datacenter) 
{ 
    $query = "SELECT inventory.id, inventory.name, inventory_type.short_name 
       FROM inventory LEFT JOIN inventory_type 
       ON inventory.type = inventory_type.id WHERE inventory.datacenter = " . $datacenter . " ORDER BY inventory_type.sort_order ASC"; 

    $result = mysql_query($query, $db); 

    echo '<option value="">None</option>'; 

    if ($result) 
    { 
     while($row = mysql_fetch_array($result)) 
     { 
      $id = $row["inventory.id"]; 
      $name = $row["inventory.name"]; 
      $type = $row["inventory_type.short_name"]; 

      if ($default_value == $id) 
      { 
       echo '<option selected value="' . $id . '">' . $type . ": " . $name . '</option>'; 
      } 
      else 
      { 
       echo '<option value="' . $id . '">' . $type . ": " . $name . '</option>'; 
      } 
     } 
    } 
} 
+0

'아무도 작동하지 않는 것'으로 무엇을 의미합니까? 쿼리가 정상적으로 보입니다. 데이터 샘플을 게시해야합니다. –

+0

무엇이 오류입니까? –

+0

$ result = mysqli_query ($ query, $ db) 직후에 print_r ($ result)을 사용하여 데이터 집합을 디버그하십시오. –

답변

2

나는 문제가 여기에있다 생각 :

$id = $row["inventory.id"]; 
$name = $row["inventory.name"]; 
$type = $row["inventory_type.short_name"]; 

시도 :

$id = $row['id']; 
$name = $row['name']; 
$type = $row['short_name']; 

* 참고 MySQL의 확장 is now deprecated and will be removed sometime in the future 그. 그것은 고대이고 나쁜 관행으로 가득 차 있고 현대적인 특징이 부족하기 때문입니다. 새 코드를 작성하는 데 사용하지 마십시오. 대신 또는 mysqli_*을 사용하십시오.

function getInventoryOptions($db, $default_value, $datacenter) 
{ 
    $query = "SELECT inventory.id, inventory.name, inventory_type.short_name 
       FROM inventory LEFT JOIN inventory_type 
       ON inventory.type = inventory_type.id WHERE inventory.datacenter = " . $datacenter . " ORDER BY inventory_type.sort_order ASC"; 

$link = mysqli_connect("[your_host]","[your_user]","[password]","[database]") or die("Error " . mysqli_error($link)); 



//execute the query. 

$result = $link->query($query); 

//display information: 

while($row = mysqli_fecth_array($result)) { 

     $id = $row['id']; 
     $name = $row['name']; 
     $type = $row['short_name']; 

     if ($default_value == $id) 
     { 
      echo '<option selected value="' . $id . '">' . $type . ": " . $name . '</option>'; 
     } 
     else 
     { 
      echo '<option value="' . $id . '">' . $type . ": " . $name . '</option>'; 
     } 
} 
0

inventory.type 열이 LEFT JOIN에 대한 필요가 없습니다 (다음 사항을 확인하시기 바랍니다) not null한다는 가정하에 :

UPDATE는

여기 mysqli의 함수에 해당합니다. INNER JOIN이 트릭을 수행합니다.

연관 배열 만 필요하므로 mysql_fetch_array() 대신 mysql_fetch_assoc()을 사용하거나 두 번째 매개 변수로 MYSQL_ASSOC을 지정하십시오.

또한, mysqli 또는 PDO으로 이식하는 것을 고려하십시오 (다른 사람의 답글 참조).

반환 된 연관 배열의 키는 테이블 이름 부분없이 일반 필드 이름입니다.

마지막으로, inventory은 왼쪽 테이블이되며 inventory_type 테이블에 해당 레코드가 있는지 여부에 관계없이 모든 레코드가 결과에 참여합니다.

관련 문제