2012-11-26 73 views
0

我有以下功能:PHP/MySQL - 查詢循環?

private static function getFixedFare($FixedFareId) { 

    $pdo = new SQL(); 
    $dbh = $pdo->connect(Database::$serverIP, Database::$serverPort, Database::$dbName, Database::$user, Database::$pass); 

    try { 

     $query = "SELECT Fare FROM tblfixedfare 
        WHERE FixedFareId = :fixed_fare_id 
        AND DayHalf = :day_half"; 

     $stmt = $dbh->prepare($query); 

     $stmt->bindParam(':fixed_fare_id', $FixedFareId, PDO::PARAM_INT); 
     $stmt->bindParam(':day_half', self::$day_half, PDO::PARAM_STR); 

     $stmt->execute(); 

     $result = $stmt->fetch(PDO::FETCH_COLUMN); 

     $stmt->closeCursor(); 

     $dbh = null; 

     return $result; 

    } 

    catch (PDOException $pe) { 
     die("Error: " .$pe->getMessage(). " Query: ".$stmt->queryString); 
    } 

} 

基本上我想改變查詢做九種不同的選擇,具體如下:

 $query = "SELECT Fare FROM tblfixedfare 
        WHERE FixedFareId = :fixed_fare_id 
        AND DayHalf = :day_half 
        AND CarType = 'Car'"; 

 $query = "SELECT Fare FROM tblfixedfare 
        WHERE FixedFareId = :fixed_fare_id 
        AND DayHalf = :day_half 
        AND CarType = 'Est'"; 

與同爲所有其他類型的車輛,'Exec','ExecEst','6B','7B','7W','8B'和'巴士'將只會是這些車型。

我希望能將這些查詢結果中的每一個存儲到不同的變量中,而不必做9個不同的查詢(減少代碼)。如一個循環,然後將結果存儲到$ resultcar,$ resultest等...

不確定我會如何做到這一點,所以任何幫助將不勝感激! :-)

回答

2

你可以做一個在

SELECT CarType, Fare FROM tblfixedfare 
WHERE FixedFareId = :fixed_fare_id 
AND DayHalf = :day_half 
AND CarType IN ('Car', 'Est' ...); 

請注意,您必須包括在選擇CarType這樣你就可以在查詢後過濾。

更新:您可以將您的搜尋結果CarType已經是這樣的:

$results = $stmt->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_GROUP); 

上面的代碼應該給你這樣的:

array(
    'Car' => array(
     // data 
    ), 
    'Est' => array(
     // data 
    ) 
) 

如果你不介意改變你變量,你可以馬上讓它們變量不變循環通過extract(...)

所以餵養

$results = $stmt->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP); 

也就是上面提到的數組中提取:

extract($results, EXTR_PREFIX_ALL, 'result'); 

會讓你有變量的結果集已經:

var_dump($result_Car); 
array(2) { 
    [0]=> array(1) { 
     ["Fare"]=> string(1) "100" 
    } 
    [1]=> 
    array(1) { 
     ["Fare"]=> string(1) "200" 
    } 
} 

總而言之,在一行:

extract($q->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_GROUP), EXTR_PREFIX_ALL, 'result'); 
1

爲了重複查詢在九個不同的汽車類型,你可以在每個車的名字存儲到通過數組的數組和循環每次插入新的名稱:

$cars = array(); 
array_push($cars, "Car", "Est", "Exec", "ExecEst", "6B", "7B", "8B","Bus"); 

for($i=0; $i < sizeof($cars); $i++) 
{ 
     try { 

      $query = "SELECT Fare FROM tblfixedfare 
         WHERE FixedFareId = :fixed_fare_id 
         AND DayHalf = :day_half 
         AND CarType = '".$cars[i]."'"; 

      //.....rest of your code  
     } 

     catch (PDOException $pe) { 
      die("Error: " .$pe->getMessage(). " Query: ".$stmt->queryString); 
     } 
} 

然後可以每個查詢的結果存儲在一個新的數組使用汽車的名字(例如$ cars [i])作爲鑰匙。