【问题标题】:Confusing MySQL Join Tables令人困惑的 MySQL 连接表
【发布时间】:2018-04-13 18:48:10
【问题描述】:

我需要帮助构建一个 mysql 查询来连接几个表。我已经盯着它看了一段时间,尝试了不同的想法,但我不知道该怎么做。

我有两张桌子:

1) TASKS
- id
- name
- description
- date_added
- status


2) T_USERS_ASSIGNED
- id
- task_id
- user_id

第一个表包含任务及其状态。第二个表包含分配给他们的用户。由于单个任务可以有多个用户分配给它,因此单个任务的 T_USERS_ASSIGNED 中可能有多个记录。

我正在尝试计算分配给特定用户的所有任务,其中任务状态等于 1。

我尝试了类似的方法,但失败了。任何帮助或见解将不胜感激:

SELECT `p_tasks_assigned`.`id` as `users`
 FROM
 `p_tasks_assigned` JOIN
 `p_tasks` ON `p_tasks_assigned`.`task_id` = `p_tasks`.`id`
WHERE `p_tasks`.`status` = 1 ANND `p_tasks_assigned`.`user_id` = :user;

$result = $db->prepare (statement above);
$result->bindValue (':user', $_POST['id'], PDO::PARAM_INT);
$result->execute ();
$count_user_open = $result->rowCount ();

【问题讨论】:

  • 我不确定这是否只是 SO 上的拼写错误,但您拼错了您的 AND 语句之一。
  • 您是否收到任何错误消息?如果是的话,发布它会很有帮助。

标签: php mysql sql join


【解决方案1】:

这样的事情应该可以工作:

SELECT a.user_id
     , COUNT(DISTINCT t.id) AS count_tasks_assigned
  FROM t_users_assigned a
  LEFT
  JOIN tasks t
    ON t.id = a.task_id
   AND t.status = 1
 GROUP BY a.user_id
 ORDER BY a.user_id

这会吸引所有用户。如果您只想返回单个用户的计数,并将 user_id 作为绑定参数传入(正如我刚刚在您的示例中注意到的那样),那么:

SELECT COUNT(DISTINCT t.id) AS count_tasks_assigned
  FROM t_users_assigned a
  LEFT
  JOIN tasks t
    ON t.id = a.task_id
   AND t.status = 1
 WHERE a.user_id = :user
 GROUP BY a.user_id
 ORDER BY a.user_id

【讨论】:

    【解决方案2】:

    如果我理解正确,您正在寻找用户列表,然后在该用户的名称旁边将是状态为 1 的许多任务。由于可以将多个用户分配给一个任务,因此这些总和数字可能大于任务数。如果是这种情况,您的查询将如下所示:

    SELECT user_id, 
           Count(*) AS count 
    FROM   t_users_assigned 
           LEFT JOIN tasks 
                  ON t_users_assigned.task_id = tasks.id 
    WHERE  status = 1 
    GROUP  BY user_id;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2022-01-17
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多