我正在制作一个时间表提交/批准功能,目前正在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并将它们放在一起(start - end)(start_time - end_time |用户名| id |提交日期|提交状态等)
有人告诉我使用group_catcon之类的,但我不熟悉。
从我的pic,我想要这样:
2012-12-30 - 2013-01-05 | admin | submitid#### | submitdate | status | approver
2013-01-06 - 2013-01-09 | admin | submitid#### | submitdate | status | approver
我对php/mysql很陌生,所以我很抱歉
您可能会发现,所有这些列将事情划分得比您想要的更多。例如,有各种各样的审批者。为此,您可能需要从查询中删除一些。
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
我已经用多种语言构建了许多时间表应用程序。您可以使用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 by或批量操作。查询工作,但作者列不可靠。
现在从你的数据库结构,我不认为你可以做一个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