2011-04-13 2 views
0

저는 초보자이며 dreamweaver를 사용하여 웹 페이지를 만듭니다. 두 번째 드롭 상자에서 주먹 놓기 결과에 따라 값을 드롭 다운 할 수있는 SQL 쿼리가 필요합니다.SQL 하위 쿼리 - 첫 번째 쿼리의 값에 따라

나는 Cars()와 다른 테이블 자동차 모델로 MySQL 테이블을 가지고 있고 세 번째는 자동차 년도이다.

내가 지금까지 무엇을했는지 있습니다 :

  1. 자동차에서 별개의 차량을 선택합니다 - 지금이
  2. 이 carmodel 구별 carmodel을 선택하려면 첫 번째 드롭 박스의 값을 제공합니다 (carmodelid = carid) 여기는 SQL 쿼리를 사용하여 첫 번째 드롭 다운의 값에 따라 두 번째 드롭 다운의 값을 무시하는 문제입니다.

누군가 나를 도울 수 있습니까?

답변

0

이 시도 : 당신 때문에 사용자가 첫 번째 드롭 다운을 선택하는 시간으로 일반 PHP와 함께이 작업을 수행 할 수

SELECT DISTINCT carmodel FROM carmodel WHERE carmodelid IN (SELECT carid FROM cars) 
+0

패트릭이 도움이 될지 잘 모르겠습니다. 그는 자동으로 채워진 연결된 드롭 다운 상자가 분명히 필요하지만 그의 질문에 대한 그의 질문은 잘못되었습니다. – Cogicero

+0

@Cogicero : OP가 첫 번째 드롭 다운 값을 선택했거나 OP가 모든 모델을 원하는지 여부에 따라 OP가 결과 세트를 원할 경우 동의합니다. 질문은 작은 표기였습니다. – Chandu

+0

사실, Op가 질문을하는 방식이 정말 혼란 스럽습니다. 우리 둘 중 어느 누구도 옳을 지 모르지만이 부분의 OP (emphasis mine) 때문에 "SQL 쿼리를 사용하여 첫 번째 드롭 다운의 값에 따라 두 번째 드롭 다운 값이 달라집니다"라고 생각했습니다. 그러나 나는 OP가 SQL이 의도 된 목적을 달성 할 수 없다는 것을 정말로 알지 못한다고 생각했다. – Cogicero

0

, PHP는 서버 측에서 작업을 완료했습니다. 자바 스크립트가 필요하며 항상 jQuery를 사용하는 것이 좋습니다.

MySQL 쿼리의 경우 PHP PDO 클래스를 사용하고 있습니다. PHP PDO 클래스를 직접 만들었으므로 걱정하지 마세요. 근본적으로 PHP 쿼리를 가져 와서 가장 잘 아는 방법을 찾고 있습니다. SQL 인젝션에 공개되지 않습니다. google을 읽고 jQuery를 사용하여 AJAX 및 PHP를 읽어야합니다. 이것은 빠르고, 더럽고, 테스트를 거치지 않으므로 질문이있는 경우 의견에 나를 대면하십시오. 여기 간다 :

<label><span>Choose a Car:</span> 
     <select name="car" id="car" class="validate[required] longtext" onchange="getCarModels();"> 
      <option value="">-------Make a Selection------</option> 
      <?php 
      try{ 
       $carCount = DB::getDB("mysql", 1, array("carID"))->query("SELECT COUNT(DISTINCT(%s%)) FROM cars")->fetchColumn(); 
       if ($carCount > 0){ 
        $car_sql="SELECT DISTINCT %s% FROM cars"; 
        foreach (DB::getDB("mysql", 1, array("carID", "carName"))->query($car_sql) as $row){           
         echo '<option value="'.$row[carID].'">'.$row[carName].'</option>'; 
        } 
       } 
      }catch(PDOException $e){ 
       print "SQL Error: " . $e->getMessage() . "<br/>"; 
       exit(); 
      } 
      ?> 
     </select> 
    </label> 
    <label id="carModelsBox" style="display:none;"> 
     <span>Select Model:</span> 
      <select name="carmodel" id="carmodel" class="validate[required] longtext"> 
     </select> 
    </label> 

그리고 AJAX를 통해 PHP 파일을 호출 할 자바 스크립트 파일에 자바 스크립트

function getCarModels(){ 
    var carID = $('#car option:selected').val(); 
    if (carID == "") { 
     $('#carModelsBox').slideUp("fast"); 
    } 
    $.getJSON("ajax.carmodels.php", {carID:carID}, function(data){ 
     if (data.success){ 
      $('#carmodel').html(data.models); 
     }else{ 
      $('#carModelsBox').append("<p>There are no models</p>"); 
     } 
     $('#car').blur(); 
     $('#carModelsBox').slideDown("fast"); $('#carmodel').focus(); 
    }); 
} 

이 있습니다. 이 파일은 ajax.carmodels.php이며 GET을 통해 carID를 수신합니다. 아래 코드의 스 니펫 :

if ($carID!=''){ 
    try { 
     $carModelCount = DB::getDB("mysql", 1, array("carmodel.id"))->query("SELECT COUNT(DISTINCT(%s%)) FROM cars, carmodel WHERE carmodel.id = cars.id")->fetchColumn(); 
     if ($carModelCount > 0){ 
      $model_sql="SELECT DISTINCT %s% FROM cars, carmodel WHERE carmodel.id = cars.id"; 
      foreach (DB::getDB("mysql", 1, array("model", "modelname"))->query($model_sql) as $row){           
       $models .= '<option value="'.$row[model].'">'.$row[modelname].'</option>'; 
      } 
      $return['models'] =$models; 
      $return['success'] =true; 
     }  
    }catch(PDOException $e){ 
     print "SQL Error: " . $e->getMessage() . "<br/>"; 
     exit(); 
    } 
}else{ 
    $return['success'] =false; 
} 
echo json_encode($return); 

그리고 가장 중요한 점은 jquery 자체를 제공하는 것입니다. 초기 PHP 페이지에 추가하십시오.

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>