簡體   English   中英

在MySQL中將多行顯示為一行

[英]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_idform_iddue_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

顯然,我沒有對此進行測試,它可能對您不起作用,但它應該引導您朝着正確的方向發展。 閱讀GROUP BYJOIN

您需要確定何時將行計為同一分配的一部分(這可能意味着將此信息添加到表中)。 例如,如果您確定可以通過匹配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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM