Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 混淆MySQL连接表_Php_Mysql_Sql_Join - Fatal编程技术网

Php 混淆MySQL连接表

Php 混淆MySQL连接表,php,mysql,sql,join,Php,Mysql,Sql,Join,我需要帮助构建一个mysql查询来连接几个表。我已经盯着它看了一段时间了,尝试着不同的想法,但我不知道该怎么做 我有两张桌子: 1) TASKS - id - name - description - date_added - status 2) T_USERS_ASSIGNED - id - task_id - user_id 第一个表包含任务及其状态。第二个表保存分配给他们的用户。由于单个任务可以分配多个用户,因此T_users_中可能有多个记录分配给单个任务 我试图统计分配给特定用户

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

我有两张桌子:

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


2) T_USERS_ASSIGNED
- id
- task_id
- user_id
第一个表包含任务及其状态。第二个表保存分配给他们的用户。由于单个任务可以分配多个用户,因此T_users_中可能有多个记录分配给单个任务

我试图统计分配给特定用户的所有任务,其中任务的状态等于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 ();

像这样的方法应该会奏效:

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作为绑定参数传入(正如我刚才在示例中注意到的),那么:


如果我理解正确的话,您正在查找一个用户列表,然后在该用户名称旁边是一些状态为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;

我不确定这是否只是SO上的一个拼写错误,但您将
语句之一拼错了。您是否收到任何错误消息?如果是的话,贴出来会很有帮助。
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;