0

いくつかのテーブルを結合するためのmysqlクエリの作成に支援が必要です。私はしばらくの間それをじっと見つめ、さまざまなアイデアを試みてきましたが、これをどうやって行うのかわかりません。

私は2つのテーブルを持っています:

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


2) T_USERS_ASSIGNED
- id
- task_id
- user_id

最初のテーブルには、タスクとそのステータスが含まれています。2番目のテーブルには、どのユーザーが割り当てられているかが示されています。1つのタスクに複数のユーザーを割り当てることができるため、1つのタスクの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 ();
4

2 に答える 2

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
于 2012-12-14T20:02:10.900 に答える
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;
于 2012-12-14T20:54:57.870 に答える