我需要一些建议
我创建了一个Web应用程序,用户可以将表单同时分配给多个收件人,以便一个作业将多行(每个收件人一行)插入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日,点击标记为已完成
我不知道该如何解决这个问题。如果有人能指出我正确的方向,我将非常感激。
答案 0 :(得分:1)
如果我确实理解你,你想向分配的人提交一份分配清单,按分配和日期分组。 对于每个作业/日期结果,您还需要显示已完成作业权限的用户数。
因此,您希望先从sender_id
,form_id
和due_date
选择分配和Group结果:
SELECT sender_id, form_id, due_date
FROM assignments as groupedAssignments
GROUP BY
groupedAssignments.sender_id,
groupedAssignments.form_id,
groupedAssignments.due_date
现在,您还希望通过JOIN
作业来计算已完成此作业的学生人数。
这就是我添加别名'groupsAssignments'的原因。
因此,在JOIN
FROM
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 )
现在,您可以在完成的作业中添加一个Count,为您提供完整的查询:
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
答案 1 :(得分:0)
您需要确定哪些行计为同一分配的一部分(这可能意味着将此信息添加到表中)。例如,如果您决定通过匹配sender_id,form_id和due_date来完成此操作,那么您可以按以下字段进行分组:
SELECT sender_id,form_id,due_date,COUNT(recipient_id)
FROM assignments
GROUP BY sender_id,,form_id,due_date
这将给出用户完成的分配列表以及收件人的数量。当然,这可能需要调整或更改,具体取决于您决定如何匹配作业。