【问题标题】:Grouping results from MySQL query according to one column of table根据表的一列对 MySQL 查询的结果进行分组
【发布时间】:2013-09-06 19:13:43
【问题描述】:

我有以下疑问:

if ($stmt = $mysqli->prepare("SELECT Date, Due, Paid from patient_sessions WHERE Name=? AND Invoiced=? AND Type=? AND SUBSTR(Date,1,7)=? ORDER BY Date")) {

    $stmt->bind_param("ssss",$client,$invoiced,$type,$month);
    $stmt->execute();
    $stmt->store_result();
    $stmt->bind_result($date,$due,$paid);

while ($stmt->fetch()) {

RUN SOMETHING HERE

}

而不是使用循环所有返回的行的while ($stmt->fetch()),我想将由Due列中的值返回的行分组,然后循环遍历每组的每一行,但我不知道如何这样做。

额外信息

我想以以下格式返回结果:

为每个“到期”值返回一行,并计算每个值的行数(这是分组所需要的)。

然后……

每行一行,按日期排序,显示所有 3 个值(Date、Due、Paid)。

我被困住了,因为我需要分组以及单独的行。我可以用一个查询返回两者吗?

【问题讨论】:

  • 对于due 中的每个组,您要对Datepaid 列中的每个值执行什么操作?
  • 首先我想显示每组中的行数。然后,我想为显示日期和到期金额以及任何付款的每一行显示单独的行。

标签: php mysql sql pdo while-loop


【解决方案1】:
$sql = "SELECT Date, Due, Paid from patient_sessions 
        WHERE Name=? AND Invoiced=? AND Type=? AND SUBSTR(Date,1,7)=? 
        ORDER BY Due, Date";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ssss",$client,$invoiced,$type,$month);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($date,$due,$paid);
$data = array();
while ($stmt->fetch())
{
    if (!isset($data[$due]))
    {
         $data[$due] = array();
    }
    $data[$due][] = array($date,$paid);
}
print_r($data);

【讨论】:

  • 谢谢。我已经更新了我的问题,以便更清楚地了解我需要返回的数据。我可以在同一个查询中同时实现按日期排序的分组和单个行吗?
  • 是的,我可以看到它返回了一个按“到期”列分组的数组。我只是不确定如何以我需要的双重格式返回数据(根据我编辑的问题)以及这是否可以使用您的代码生成的数组来完成。
【解决方案2】:

查看“Group By”和“Having”子句。

需要更多信息才能为您提供真正的答案,但希望这些链接会有所帮助。

http://www.w3schools.com/sql/sql_having.asp

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
  • 抱歉工作有点匆忙所以想我会帮忙的。听起来这个问题自最初提出以来已经发生了一些变化,很可能可以通过内部 sql 查询来解决:select a, b, c, (select count(*) from table_d e where ec = dc group by c)从 table_d d order by b desc。或者只是单独运行两个查询,但您必须锁定表以确保查询之间没有其他数据进入。
猜你喜欢
  • 1970-01-01
  • 2017-05-09
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多