我正处于一个项目中,我将来自外部API的JSON数据放到MySQL数据库中。这很好。
GROUPING
和ORDER BY
的输出实际上并不是我想要的
到目前为止我得到了什么:
SELECT *, GROUP_CONCAT(DISTINCT (task))
FROM time_summary
GROUP BY projectName
ORDER BY clientName
表格如下:
id clientName project task
1 firm One online banner
2 firm One print folder
3 firm Two water with gas
4 firm One online website
5 firm Two water with gas
6 firm Two water with gas
输出为:
firmOne
在线
横幅,网站
打印
夹
现在问题: 分组的任务由逗号分隔。
我有一个while循环输出 - 但我需要一个新行(按项目分组)中的每个任务,如
firmOne
在线
旗帜
网站
打印
夹
PHP代码就像这样:
$new = 1;
$last_client = 'initial';
while($row = _mysql_fetch_array($sql)) {
if($last_client != $row['clientName'] && $last_client != 'initial') {
echo '<div class="cb h20"></div>';
$new = 1;
}
if($new == 1) {
echo '<span class="yellow-small">' . $row["clientName"] . '</span>';
$new = 0;
}
?>
<b><?=$row['projectName'];?></b><br>
<?=$row['GROUP_CONCAT(DISTINCT (task))'];?>
}
我怎样才能做到这一点?
答案 0 :(得分:1)
将任务聚合为CSV只是为了在PHP代码中将它们再分开,对我来说听起来不是一个好选择。以下简单查询是否会为您提供所需的数据:
SELECT DISTINCT
clientName,
project,
task
FROM time_summary
ORDER BY
clientName,
project,
task
此查询将为每个客户端和项目报告不同的任务列表。现在,您可以在PHP代码中迭代此结果集以生成所需的输出:
$client = null;
$project = null;
while ($row = _mysql_fetch_array($sql)) {
$curr_client = $row['clientName'];
if ($curr_client != $client) {
echo $curr_client."<br>";
$client = $curr_client;
}
$curr_project = $row['projectName'];
if ($curr_project != $project) {
echo " ".$curr_project."<br>";
$project = $curr_project;
}
echo " ".$row['task']."<br>";
}
<强>输出:强>
作为免责声明,我专注于获取所需显示所需的查询和表示逻辑,而不是PHP代码。这可能是另一场讨论的主题。
这是一个小型PHP演示的链接,它显示了表示逻辑的可靠性:
答案 1 :(得分:0)
如果您只是添加行
$holder = str_replace(",", "<br>", $row['GROUP_CONCAT(DISTINCT (taskName))']);
就在你之前
<?=$row['GROUP_CONCAT(DISTINCT (taskName))'];?>
然后替换你的行
<?=$row['GROUP_CONCAT(DISTINCT (taskName))'];?>
与
<?=$holder;?>
这会将逗号替换为<br>
,并强制将第二个值移到下一行。