2012-11-26 1 views
0

je la fonction suivante:PHP/MySQL - Boucle de requête?

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

} 

Fondamentalement, je veux changer la requête pour faire neuf différentes sélections, comme suit:

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

et

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

et la même chose pour tous les autres types de voitures, 'Exec', 'ExecEst', '6B', '7B', '7W', '8B' et 'Bus' qui ne seront jamais que ces types de voitures. J'espérais pouvoir stocker chacun de ces résultats de la requête dans différentes variables sans avoir à faire 9 requêtes différentes (code de réduction)

Comme une boucle puis stocker les résultats à resultcar $, $ resultest et ainsi de suite ...

ne pas sûr de savoir comment je faire de sorte que toute aide serait grandement appréciée! :-)

Répondre

2

Vous pouvez faire une IN

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

Notez que vous devez inclure le CarType dans la liste Sélectionner afin que vous puissiez les filtrer après la requête.

mise à jour: Vous pouvez regrouper vos résultats par CarType déjà comme celui-ci:

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

Le code ci-dessus devrait vous donner quelque chose comme:

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

Si vous ne vous dérange pas de changer votre variables, vous pouvez les avoir immédiatement dans les variables sans boucler à travers extract(...)

Donc l'alimentation

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

qui est le tableau mentionné ci-dessus pour extraire:

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

vous permettra d'avoir les jeux de résultats dans les variables déjà:

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

Dans l'ensemble, en une ligne:

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

Pour répéter la requête sur les neuf différents types de voiture, vous pouvez stocker chacun des noms de voiture dans un tableau et une boucle à travers le réseau d'insérer le nouveau nom à chaque fois:

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

Vous pouvez ensuite stocker le résultat de chaque requête dans un nouveau tableau utiliser le nom de la voiture (ie $ cars [i]) comme clé.

Questions connexes