2014-12-05 15 views
1

我有一個HTML表單。在那裏,我有四種不同類型的連接到數據庫表的字段,並且應該根據用戶的選擇將結果呈現給HTML表單域。如何讓我的HTML表單查詢適用於所有表單元素?

我有開始和結束日期字段。

<div class='ddate'><p>Start Date:<input type="date" id="datepicker" name="d1" ></p></div> 
         <div class='ddate'><p>End Date:<input type="date" id="datepicker1" name="d2"></p></div> 

日期字段會取出表格中用戶給出的開始日期和結束日期之間的所有行到HTML字段中。

我有和選擇字段。

<select name='md' multiple="yes" size="10"> 
       <optgroup label="Оpel"> 
        <option value="Astra" name='Ast'>Astra</option> 
           </optgroup> 
           <optgroup label="Nissan">   
        <option value="Pulsar" name='Puls'>Pulsar</option> 
        <option value="Almera" name='Alm'>Almera</option> 
       </optgroup> 
       <optgroup label="Honda"> 
        <option value="Civic" name='Civ'>Civic</option> 
           </optgroup>  
           <optgroup label="Audi"> 
        <option value="Q7" name='Q'>Q7</option>     
       </optgroup> 

       <optgroup label="BMW"> 
        <option value="M3" name='M'>M3</option> 
        </optgroup> 
           <optgroup label="Renault"> 
             <option value="Megane" name='Meg'>Megane</option> 
        </optgroup> 
           <optgroup label="Mercedes"> 
             <option value="G-Class" name='G'>G-Class</option> 
             </optgroup> 
         </select></br></br> 

在這裏,用戶選擇一個模型,並且查詢返回所有具有選定模型類型的行。

顏色的另一個選擇字段。

<select name='col' size='5'> 
          <option value='white' name='wh'>Бял</option> 
          <option value='black' name='bl'>Черен</option> 
          <option value='yellow' name='ye'>Жълт</option> 
          <option value='brown' name='br'>Кафяв</option> 
          <option value='grey' name='gr'>Сив</option> 
         </select></br></br> 

和兩個輸入字段爲馬力。

<input type='text' name='hp1'/></br> 
         ДО:<input type='text' name='hp2'/></br></br> 

這是我的表單,這裏是我的PHP。

這裏重要的是我的查詢。

$sql = "SELECT cars.brand,cars.model,cars.reg_num,cars.horse_powers,cars.color,clients.first_name, clients.last_name FROM cars INNER JOIN clients_cars ON cars.id=clients_cars.cars_id INNER JOIN clients ON clients_cars.clients_id=clients.id WHERE cars.id" 
      . " IN (SELECT DISTINCT clients_cars.cars_id FROM clients_cars WHERE (rent_date between '$d1' AND '$d2') OR (return_date between '$d1' AND '$d2') OR ((return_date>'$d2')AND(rent_date<'$d1')) OR ((horse_powers > '$hp1') AND (horse_powers < '$hp2')) OR cars.model LIKE '$md' OR cars.color LIKE '$col') "; 

這是我的查詢。它的作品很好。當我添加開始日期和結束日期時,如果我僅使用其中一個字段,則會將所有添加日期之間的行與來自html表單的任何其他字段相同。

當我使用多個(例如,我選擇顏色:黑色和120-150之間的馬力)。當我這樣做的時候,我把所有黑色的汽車和所有車型都在120-150馬力之間的汽車帶出去,而且查詢不關心120-150馬力之間的汽車顏色和黑色汽車的馬力。

我的觀點是,我希望所有的領域都照顧對方。如果有一輛配備HP 120-150的黑色轎車,只能帶我離開這輛車,而不是所有的黑色轎車和所有120-150馬力的轎車。

+1

在你的子查詢,你哪來的AR與連接,或者,可能有幫助,如果ü將其更改爲,所以它必須檢查它嗎? – UnskilledFreak 2014-12-05 16:44:51

+0

和/或是問題所在。你把它們混在一起。 – Matheno 2014-12-05 16:47:19

+0

如果我更改爲AND,那麼查詢不關心除開始日期和結束日期字段以外的任何字段。 – Gardjo 2014-12-05 16:48:05

回答

0

您在Sql中混合了「AND」和「OR」語句。 這應該做的魔力:

SELECT cars.brand,cars.model,cars.reg_num,cars.horse_powers,cars.color,clients.first_name, clients.last_name 
FROM cars 
INNER JOIN clients_cars 
ON cars.id=clients_cars.cars_id 
INNER JOIN clients 
ON clients_cars.clients_id=clients.id 
    WHERE cars.id 
    IN 
    (SELECT DISTINCT clients_cars.cars_id 
    FROM clients_cars 
    WHERE (rent_date between '$d1' AND '$d2') 
    AND ((return_date>'$d2')AND(rent_date<'$d1')) 
    AND ((horse_powers > '$hp1') AND (horse_powers < '$hp2')) 
    AND cars.model LIKE '$md' 
    AND cars.color LIKE '$col' 
) 
+0

如果我在任何地方使用AND,查詢就不起作用。它爲我打開了一個空白頁面 – Gardjo 2014-12-05 21:16:51