2012-12-14 66 views
0

我需要帮助建立一个mysql查询来连接几个表。我一直在盯着它一会儿,尝试不同的想法,但我不知道如何去做这件事。混淆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(); 
+1

我不确定它是否只是SO上的拼写错误,但拼写错了“AND”语句之一。 –

+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 
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;