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

}

基本上我想更改查询以进行九种不同的选择,如下所示:

        $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”和“Bus”也是如此,它们只会是这些车型。

我希望我可以将这些查询结果中的每一个存储到不同的变量中,而不必执行 9 次不同的查询(减少代码)。比如一个循环然后将结果存储到$resultcar、$resulttest等等...

不知道我会如何做到这一点,所以任何帮助将不胜感激!:-)

4

2 回答 2

2

你可以做一个 IN

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

请注意,您必须在 Select 中包含 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');
于 2012-11-26T15:15:14.577 回答
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] )作为键将每个查询的结果存储在一个新数组中。

于 2012-11-26T15:18:57.100 回答