PHP PDO Group按列结果

时间:2014-03-05 21:47:54

标签: php mysql pdo

是否可以使用PDO按列对结果进行分组?

我目前正在使用以下代码从MySQL获取数据:

<?php
// connect (better to be moved into included file)
$dsn = "mysql:host=localhost;dbname=login;charset=utf8";
$opt = array(
PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$db = new PDO($dsn,"xxxxx", "xxxxx", $opt);

// getting files
$stmt = $db->query("SELECT * FROM releases");
$files = $stmt->fetchAll();

//output
?>
<div id="contentWrapper">
<?php foreach($files as $row): ?>
<div id='contentItem'>
    <a href="<?=$row['fullURL']?>" title="<?=$row['title']?>">
        <img src="<?=$row['imgURL']?>" width='200px' height='150px' />
    </a>
</div>
<?php endforeach ?>
</div>

我想通过数据库中的release_date列对结果进行分组,如下所示:

RELEASE DATE 1
 - product 1
 - product 2
RELEASE DATE 2
 - product 3
...

我可以使用以下代码获得所需的结果,尽管我似乎无法使用PDO而不是标准的MySQL连接。

$query = mysql_query("SELECT * FROM releases");
$group_date = null;
while ($row = mysql_fetch_assoc($query)) {
if ($group_date !== substr($row["release_date"], 0, 10)) {
    $group_date = substr($row["release_date"], 0, 10);

1 个答案:

答案 0 :(得分:0)

由于您在后面有以下代码,因此您将结果集中的下一行加载到$row变量中:

if ($group_date !== substr($row["release_date"], 0, 10)) {
    $group_date = substr($row["release_date"], 0, 10);

您将使用PDO将其放在代码中的相同位置:

<?php
foreach($files as $row):
if ($group_date !== substr($row["release_date"], 0, 10)) {
    $group_date = substr($row["release_date"], 0, 10);
?>

您可以通过执行以下操作来将整个结果集加载到数组中来优化性能:

<?php ...
....
// $files = $stmt->fetchAll();
// See that I've commented it here
// as you don't call fetchAll now
$group_date = "";
?>
<div id="contentWrapper">
<?php
while( $row = $stmt->fetch(PDO::FETCH_ASSOC) ) {
// Notice the change above
if ($group_date !== substr($row["release_date"], 0, 10)) {
    $group_date = substr($row["release_date"], 0, 10);
?>
<div id='contentItem'>
    <a href="<?=$row['fullURL']?>" title="<?=$row['title']?>">
        <img src="<?=$row['imgURL']?>" width='200px' height='150px' />
    </a>
</div>
<?php } ?>