繁体   English   中英

使用PDO输出分组结果

[英]output grouped results with PDO

我目前很难找到一种以我想要的方式显示PDO查询结果的方法。

我只是通过一个自己设定的小任务学习PHP / PDO和MySQL,下面是我的选择查询。

try{
$sth=$dbh->prepare("SELECT backup.bakLoc, client.cliName, project.prjName, assistant.astName, session.sessDate, session.stdID, backup.bakID, backup.bakName, backup.bakDate, backup.bakKeep, backup.recLoc, backup.bakDeleted
                    FROM session
                    INNER JOIN studio ON session.stdID=studio.stdID
                    INNER JOIN engineer ON session.engID=engineer.engID
                    INNER JOIN assistant ON session.astID=assistant.astID
                    INNER JOIN client ON session.cliID=client.cliID
                    INNER JOIN project ON session.prjID=project.prjID
                    INNER JOIN composer ON session.cmpID=composer.cmpID
                    INNER JOIN fixer ON session.fixID=fixer.fixID
                    LEFT JOIN backup ON session.bakID=backup.bakID
                    WHERE session.stdID = :stdID AND (ISNULL(backup.bakDeleted) OR backup.bakDeleted =0)
                    ORDER BY session.stdID,backup.bakLoc,sessDate; ");

 $sth->bindParam(':stdID', $_GET['studio'], PDO::PARAM_INT);

 $sth->execute();



}
catch(PDOException $e) {
   print $e->getMessage();
}

我遇到的问题与您输出此查询结果的方式有关。

id希望按backup.bakLoc列对输出进行分组。 该列可以包含四个结果之一,即NULL,1,2或3。我想将其输出到html,并为每个结果集使用单独的标头,而不是使用变化的子句设置4个查询。 为了过去完成此操作,我最终将每个列转储到其自己的数组中,然后使用几个if语句对输出进行迭代,以监视列值的更改,或者仅在WHERE子句更改的情况下在每个标题下运行查询。 必须有一种更直接的方法。

所以在这样的页面上

<h1>Not Backed Up</h1>
    //all results of when $row['bakLoc'] is NULL or 0
<?=$row['bakName']; ?><br />

<h1>backup location 1</h1>
   //all results of when $row['bakLoc'] is 1
<?=$row['bakName']; ?><br />

我一直在玩PDO :: FETCH_GROUP,但我无法按照我的要求使其工作。 我希望有人可以指出正确的方向,以便像这样分割结果,而无需多个查询。 (这当然是最好的方法,除非多次查询。)

提前致谢。

如果要查找每个backup.bakLoc的计数,这将为您提供一条记录,其中包含4个backLoc值的计数:

SELECT  SUM(CASE WHEN backup.bakLoc IS NULL THEN 1 ELSE 0 END) backLoc_null,
        SUM(CASE WHEN backup.bakLoc = 1 THEN 1 ELSE 0 END) backLoc_1,
        SUM(CASE WHEN backup.bakLoc = 2 THEN 1 ELSE 0 END) backLoc_2,
        SUM(CASE WHEN backup.bakLoc = 3 THEN 1 ELSE 0 END) backLoc_3

<the rest of your query>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM