0

私は次の機能を持っています:

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

}

基本的に、次のように、9 つの異なる選択を行うようにクエリを変更したいと考えています。

        $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 などに保存するなど...

私がこれをどのように行うかわからないので、どんな助けでも大歓迎です!:-)

4

2 に答える 2

2

あなたはINを行うことができます

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

全体として、1行で:

extract($q->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_GROUP), EXTR_PREFIX_ALL, 'result');
于 2012-11-26T15:15:14.577 に答える
1

9つの異なる車種でクエリを繰り返すために、各車の名前を配列に格納し、配列をループして毎回新しい名前を挿入できます。

$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])をキーとして使用して、各クエリの結果を新しい配列に格納できます。

于 2012-11-26T15:18:57.100 に答える