2011-04-13 119 views
0

我是一名初學者,正在使用Dreamweaver創建一個網頁。我需要一個SQL查詢,它允許第二個下拉框根據第一個下拉框的結果下拉值。SQL子查詢 - 取決於第一個查詢的值

我有一個MySQL表作爲汽車()和其他表汽車模型和第三個是汽車年。

這是我迄今所做的:

  1. 從汽車選擇不同的汽車 - 這帶來了第一投寄箱值
  2. 選擇carmodel不同carmodel其中(carmodelid = carid) 現在這是我遇到問題的地方,根據使用SQL查詢的第一個下拉列表的值,將第二個下拉列表中的值刪除。

有人可以幫我嗎?

回答

0

試試這個:

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

我不確定這會對Patrick有幫助。他顯然需要自動填充的鏈接下拉框,但他的問題在他的意義上是錯誤的。 – Cogicero 2011-04-13 17:00:05

+0

@Cogicero:我同意你的觀點,如果OP希望結果​​集由選定的第一個下拉值或OP是否需要所有模型驅動。問題是小小的問題 – Chandu 2011-04-13 17:02:26

+0

沒錯,Op說明了這個問題真的令人困惑。我們中的任何一個都可能是正確的,但是由於OP的這一部分(我的重點),我假定它是「第二次drodown中的值取決於使用SQL QUERY的第一個下拉列表的值」。但我猜測OP不知道SQL無法實現預期的目標。 – Cogicero 2011-04-14 16:49:35

0

你不能因爲用戶是選擇第一個下拉的時間與普通的PHP爲此,PHP已經完成了對服務器端的工作。你將需要JavaScript,我總是推薦jQuery。

對於MySQL查詢,我使用的是我爲自己創建的PHP PDO類,我習慣於(不必擔心這一點),但實質上,只需獲取PHP查詢如何知道最好,並確保您不會對SQL注入開放。你將需要谷歌和閱讀AJAX和PHP使用jQuery。這是快速,骯髒和未經測試,所以如果你有問題,請在評論中打我。這裏所說:

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

和JavaScript

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(); 
    }); 
} 

此JavaScript文件將通過AJAX調用PHP文件。這個文件是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>