[英]Display multiple rows as one in MySQL
我需要一些建議
我創建了一個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
是一個數組,其中的用戶ID由$row['id']
引用。
因此,例如,一個作業可以生成100個這樣的行(對於100個收件人),每個收件人可以將其單獨的行編輯為“已完成”。 到目前為止,這很好。
問題是,如果我想為分配用戶的用戶生成分配列表,我希望他只看到多用戶分配的一行(而不是向他發送分配給的每個收件人的一行)。
我希望能夠向用戶顯示如下表格:
您分配了:表格1收件人:50個用戶截止日期:2014年4月25日用戶完成:10查看用戶列表
每個受讓人都會看到一個表格,如下所示:
用戶1為您分配了以下表單:表單1到期日:2014年4月25日,單擊以標記為已完成
我不確定該怎么做。 如果有人能指出正確的方向,我將不勝感激。
如果我確實正確理解您的意思,那么您想向作業人員出示一份作業清單,按作業和日期分組。 對於每個分配/日期結果,您都希望顯示有多少用戶已完成分配權限。
所以,你想從分配和選擇集團通過你的結果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
現在,您還想JOIN
作業,以計算已經完成此作業的學生人數。 這就是為什么我添加別名“ groupedAssignments”的原因。 因此,在FROM
JOIN
添加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
您需要確定何時將行計為同一分配的一部分(這可能意味着將此信息添加到表中)。 例如,如果您確定可以通過匹配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
這將給出用戶完成的任務列表以及接收者的數量。 當然,這可能需要調整或更改,具體取決於您決定如何匹配分配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.