php - 在 MySQL 中将多行显示为一行

标签 php mysql

我需要一些建议

我创建了一个网络应用程序,用户可以同时将表单分配给多个收件人,以便一次分配将多行(每个收件人一行)插入到 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_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

现在您还想加入作业以获取已完成该作业的学生数量。 这就是我添加别名“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

显然我没有测试过这个,它可能对你不起作用,但它应该引导你走向正确的方向。 阅读GROUP BYJOIN .

关于php - 在 MySQL 中将多行显示为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23263372/

相关文章:

php - 搜索加拿大省份

php - 在不触及核心供应商文件夹的情况下自定义 Yii2 插件

php - 将数据库数据加载为动态页面

python - 如何在python中使用mysql代理

代码 :The state field path cannot be resolved to a valid type 中的 Java JPA Mysql 错误

MySQL - InnoDB 或 MyISAM - 只读表

java - 如何使用 Hibernate 将 JTable 与数据库绑定(bind)

php - CodeIgniter 使用 if 来显示一些表格

php - 从 lang 为 en 的数据库中选择的内连接查询

mysql - 从子查询中删除