我需要帮助构建一个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 ();
答案 0 :(得分:0)
这样的事情应该有效:
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
答案 1 :(得分:0)
如果我理解正确,那么您正在寻找用户列表,然后该用户名旁边将是许多状态为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;