PHP - PDO获取结果集,其中列为索引,列为值

时间:2014-02-22 07:17:12

标签: php mysql pdo

您好我有一张具有以下结构的表

+-------------+------+
| date        | price|
+-------------+------+
| 2014-02-19  |   34 |
| 2014-02-20  |   30 |
| 2014-02-21  |   28 |
+-------------+------+

目前PDO :: FETCH_ASSOC返回一个格式相似的关联数组

array(
  0=> array(
    "date" =>  2014-02-19 ,
    "price" => 34
),
 1=> array(
    "date" =>  2014-02-20 ,
    "price" => 30
),
 2=> array(
    "date" =>  2014-02-21 , 
    "price"=> 28
 )

)

顺便说一下,这是好的,但我正在寻找一种方法来返回值为key =>带键的值对是日期,值是价格。这样我就可以使用日期作为键快速访问价格值,从而大量减少计算量,因为我必须处理数百万行,并且在循环中访问每个值只会导致程序慢下来。

所以这就是我在寻找PDO :: fetchALL()来返回

array(
"2014-02-19" => 34,
"2014-02-20" => 30,
"2014-02-21" => 28
)

我的意思是我可以使用foreach循环轻松构建它,但在我的情况下它不可能,因为它会导致巨大的性能下降。因此,如果任何人能指出我正确的方向,那将是非常有帮助的。我会感谢任何帮助或提示。

谢谢, MAXX

3 个答案:

答案 0 :(得分:6)

我认为可以使用获取选项来完成。

$sth = $dbh->prepare("SELECT date, price FROM some_table");
$sth->execute();


$sth->fetchAll(PDO::FETCH_KEY_PAIR|PDO::FETCH_GROUP);

仅当获取的数据是一对值时才有效。

答案 1 :(得分:3)

我认为没有任何内置可以做到这一点。您可以使用普通的fetch()循环来执行此操作:

$results = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $results[$row['date']] = $row['price'];
}

答案 2 :(得分:-1)

尝试foreach ($sql_stmt as $row) ...很容易处理所有结果集......

根据您的系统

更改数据库名称,用户ID,表名称等
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

try {
    $dbConnection= new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, TRUE);

$sql_stmt = $dbConnection->prepare($sql_query="select date,price from table;");

$sql_stmt->execute();
foreach ($sql_stmt as $row) {
$date_col=$row['date']; 
$price_col=$row['price']; 
print $date_col;
print $price_col;
}

如果你想在数组中存储值,那么就像在下面相同的foreach循环一样使用(声明并增加$ i)

$date_col[$i]=$row['date']; 
$price_col[$i]=$row['price'];