我正在制作时间表提交/批准功能,目前正在处理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");
现在它显示了该周的所有时间表条目: example
我真正需要的是每周提交一行。基本上,抓住第一个start_time和最后一个end_time并将它们组合在一起(开始 - 结束) (start_time - end_time | username | id | submitdate | submit status..etc)
有人告诉我使用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很新,所以我很抱歉
答案 0 :(得分: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
答案 1 :(得分:0)
我用多种语言构建了许多时间表应用程序。您可以使用group_concat将字符串与逗号绑定在一起,但我认为这不是您所需要的。
要抓住的是你必须和group by一起使用它。从您的数据库结构中,它可能不适合您。
“group by”规则是您必须选择在“group by”列列表中使用的列,或者您必须在该列上使用聚合函数。
在具有以下结构的书籍表上 books_sold(id,author_id,date,price) 你可以做以下的操作
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并仍然可以获得所需的字段。如果批准者在一周内不是同一个人,会发生什么?您的批准者专栏没有意义。如果提交者在一整周内不一样会怎么样?如果提交日期在一整周内不相同会怎样?
如果这些列始终相同,则可以执行
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