2012-12-14 29 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;