0

我目前很难找到一种方法来以我想要的方式显示 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 但我无法让它像我想要的那样工作。我希望有人可以为我指出正确的方向,以便在不需要多个查询的情况下拆分这样的结果。(当然,除非多个查询是最好的方法。)

提前致谢。

4

1 回答 1

0

如果您正在查找每次出现 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>
于 2013-01-24T18:01:56.947 回答