我需要一些建议
我创建了一个网络应用程序,用户可以同时将表单分配给多个收件人,以便一次分配将多行(每个收件人一行)插入到 form_assignments
表中,如下所示:
foreach ($recipients as $row) {
$query = "INSERT INTO form_assignments
(sender_id, recipient_id, form_id, due_date, priority_id, comment, completed)
VALUES
('{$sender_id}', " . $row['id'] . ", '{$assigned_form_id}', '2014-04-30 00:00:00', '{$priority_id}', '{$comment}', '{$completed}')";
在上面的示例中,$recipients
是一个数组,其中包含由 $row['id']
引用的用户 ID。
例如,一项作业可以生成 100 个这样的行(针对 100 个收件人),并且每个收件人都可以将其单独的行编辑为“已完成”。到目前为止这一切都很好。
问题是,如果我想为分配任务的用户生成分配列表,我希望他只能看到多用户分配的一行(而不是他向其发送分配的每个收件人的一行)。
我希望能够向用户显示如下表格:
您将:表格 1 分配给:50 位用户 截止日期:2014 年 4 月 25 日 已完成用户:10 查看用户列表
每个受让人都会看到一个类似的表格:
用户 1 为您分配了以下表格:表格 1 截止日期:2014 年 4 月 25 日,点击标记为已完成
我不知道该怎么做。如果有人能指出我正确的方向,我将不胜感激。
最佳答案
如果我理解正确的话,您想向分配的人展示一份按任务和日期分组的任务列表。 对于每个作业/日期结果,您还希望显示有多少用户已经完成了作业。
所以你想从作业中选择 Group首先按 sender_id
、form_id
和 due_date
获取结果:
SELECT sender_id, form_id, due_date
FROM assignments as groupedAssignments
GROUP BY
groupedAssignments.sender_id,
groupedAssignments.form_id,
groupedAssignments.due_date
现在您还想加入
作业以获取已完成该作业的学生数量。
这就是我添加别名“groupedAssignments”的原因。
因此,在 FROM
JOIN
JOIN assignments as finishedAssignments ON (
groupedAssignments.sender_id = finishedAssignments.sender_id
AND groupedAssignments.form_id = finishedAssignments.form_id
AND groupedAssignments.due_date = finishedAssignments.due_date
AND finishedAssignments.completed = TRUE )
现在您可以在已完成的作业上添加计数,从而提供完整的查询:
SELECT
groupedAssignments.sender_id,
groupedAssignments.form_id,
groupedAssignments.due_date,
COUNT(finishedAssignments.completed) as finishedStudents
FROM assignments as groupedAssignments
JOIN assignments as finishedAssignments ON (
groupedAssignments.sender_id = finishedAssignments.sender_id
AND groupedAssignments.form_id = finishedAssignments.form_id
AND groupedAssignments.due_date = finishedAssignments.due_date
AND finishedAssignments.completed = TRUE )
GROUP BY
finishedAssignments.sender_id,
finishedAssignments.form_id,
finishedAssignments.due_date
关于php - 在 MySQL 中将多行显示为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23263372/