2011-08-19 61 views
0

我有一個查詢我的MySQL數據庫,但我只是想知道如果有更多的完成一件事情的一個簡單的方法更有效的方式,這是我的代碼:是否有表達這個查詢

$sql="SELECT value 
    FROM drivers 
    WHERE drivers_id = '$driver1' OR drivers_id = '$driver2' OR drivers_id = '$driver3'"; 

$result = mysql_query($sql); 

$i = 1; 
while ($row = mysql_fetch_assoc($result)) { 
    ${'value'.$i} = $row['value']; 
    $i++; 
} 

這就是我想要的代碼,因爲它比較短,但是我遇到的問題是我需要知道,在數據庫中找到$ driver1變量的位置,檢索到的數據位於value1變量中, $ driver2的檢索信息放在$ value2中。但是它會按照匹配的順序從數據庫中獲取數據。我不想爲此寫3個不同的查詢,因爲我確信它可以在一箇中完成。

+0

這聽起來像你需要你的匹配以某種方式排序。訂單的條件是什麼? –

+0

這並不能解決你的問題,但是你可以使用'SELECT value FROM drivers WHERE drivers_id IN($ driver1,$ driver2,$ driver3)'而不是所有的'OR's。 – Vache

回答

3
$sql="SELECT drivers_id, value FROM drivers WHERE drivers_id IN ('$driver1','$driver2','$driver3')"; 

$result=mysql_query($sql); 
while($row = mysql_fetch_assoc($result)) { 
    ${'value_for_'.$row['drivers_id']}=$row['value']; 
} 

繁榮。

雖然個人,而不是在即時變量的,我會用一個數組瓦特/ ID的作爲鍵:

... 
$resultArray = array(); 
while($row = mysql_fetch_assoc($result)) { 
    $resultArray[$row['drivers_id']]=$row['value']; 
} 
+0

實際上這對我不起作用:(它仍然沒有按照IN子句中指定的順序檢索數據,它仍然檢索並放入變量,取決於它首先匹配誰,它需要按順序排列因爲我也是按照這個順序返回變量 – Ali

+0

它返回的順序應該是不相關的(如果你的代碼設計得很好); while循環創建包含'$'的值的動態變量名driver(1 | 2 | 3)'。也許你應該發佈引用原始'$ value(1 | 2 | 3)'變量的原始代碼?另外,你可以在SQL的末尾添加'drivers_id' (假設'$ driver(1 | 2 | 3)'的值是遞增的)。 –

0

如果你想改變結果的順序,可以添加一個order by子句查詢:

$sql = "SELECT drivers_id, value FROM drivers WHERE drivers_id IN ('$driver1','$driver2','$driver3') ORDER BY drivers_id"; 
...