[英]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.