1

我正在制作时间表提交/批准功能,目前正在处理pending.php页面,经理/管理员可以转到pending.php并查看待审核的时间表...

我现在的代码是:

list($qh,$num) = dbQuery(
"SELECT start_time, end_time, uid, submitid, submitstatus, submitdate, submitapprover 
FROM $TIMES_TABLE 
WHERE submitstatus=1 
ORDER BY submitid");

现在它显示了该周的所有时间表条目: 示例

我真正需要的是每周提交的一行。基本上,抓住第一个 start_time 和最后一个 end_time 并将其放在一起(开始 - 结束)(开始时间 - 结束时间 | 用户名 | id | 提交日期 | 提交状态..等)

有人告诉我使用 group_catcon 或其他东西,但我不熟悉。

从我的照片中,我想要类似的东西:

2012-12-30 - 2013-01-05 | admin | submitid#### | submitdate | status | approver
2013-01-06 - 2013-01-09 | admin | submitid#### | submitdate | status | approver

我对 php/mysql 很陌生,所以我很抱歉

4

2 回答 2

1

您可能会发现所有这些列中的内容比您想要的要多。例如,有各种批准者。为此,您可能希望从查询中删除一些。

select 
  concat(min(start_time), ' - ', max(end_time)), 
  uid, 
  submitid, 
  submitstatus, 
  submitdate, 
  submitapprover
FROM 
  $TIMES_TABLE
WHERE 
  submitstatus=1 
GROUP BY
  uid, 
  submitid, 
  submitstatus, 
  submitdate, 
  submitapprover
ORDER BY 
  submitid
于 2013-01-14T21:29:12.490 回答
0

我已经用多种语言构建了许多时间表应用程序。您可以使用 group_concat 它用逗号将字符串联系在一起,但我认为这不是您所需要的。

问题是您必须将它与 group by 一起使用。从您的数据库结构来看,它可能对您不起作用。

“分组依据”的规则是您必须选择在“分组依据”列列表中使用的列,或者您必须在该列上使用聚合函数。

在具有以下结构 books_sold (id, author_id, date, price) 的 books 表上,您可以执行以下操作

select sum(price), author FROM books_sold group by author

获取每位作者的书籍总数。

select sum(price), date FROM books_sold group by date

得到每个日期售出的书籍的总和。

select group_concat(id), date FROM books_sold group by date

获取每个日期售出的所有书籍的 ID。id 将用逗号分隔

但你不能做一个

select group_concat(id), date, author FROM books_sold group by date

因为在作者列上,您没有进行分组或批量操作。查询有效,但作者列不可靠。

现在从您的数据库结构来看,我认为您无法执行 group_concat 并仍然获得您想要的字段。如果批准人在一周内不是同一个人会怎样?您的审批人列将没有意义。如果整个一周的 submitid 都不一样怎么办?如果整周的提交日期不同,会发生什么?

如果这些列始终相同,您可以执行

select CONCAT(min(start_time), ' - ', max(end_time)), uid, submitid, submitstatus, submitdate, submitapprover FROM $TIMES_TABLE WHERE submitstatus=1 GROUP BY uid, submitid, submitstatus, submitdate, submitapprover ORDER BY submitid
于 2013-01-14T21:44:27.450 回答