【发布时间】:2009-09-10 15:17:21
【问题描述】:
我在使用 MySQL 和从连接表中选择列数时遇到了一些问题。我有一种感觉,这将需要一个子选择语句来获取我想要加入的行,而不是在我的主要条件中执行它。
我正在尝试选择链接到某个用户的项目列表。我还想包括分配给该项目和该用户的任务计数(但仅限于特定状态的任务)。
我几乎可以使用它 - 这意味着根本没有。它只会返回项目 id 1,而不是 id 2。这是因为我的 'tasks.status
任何帮助都会很棒。如果我需要解释其他任何内容,请告诉我。
+-------------------------+
| projects_to_users |
+-----------+-------------+
+ user_id | project_id |
+-----------+-------------+
+ 1 | 1 |
+-----------+-------------+
+ 1 | 2 |
+-----------+-------------+
+-------------------------+
| projects |
+--------------+----------+
+ project_id | name |
+--------------+----------+
+ 1 | Foo |
+--------------+----------+
+ 2 | Bar |
+--------------+----------+
+------------------------------------------------+
| tasks |
+-----------+--------------+----------+----------+
+ task_id | project_id | status | name |
+-----------+--------------+----------+----------+
+ 1 | 1 | 1 | Do it |
+-----------+--------------+----------+----------+
+ 2 | 1 | 1 | Do itt |
+-----------+--------------+----------+----------+
+ 3 | 1 | 9 | Do not |
+-----------+--------------+----------+----------+
SELECT count( tasks.task_id ) AS task_count, projects.*
FROM (projects)
LEFT JOIN tasks ON tasks.project_id = projects.project_id
LEFT JOIN projects_to_users ON projects.project_id=projects_to_users.project_id
WHERE tasks.status<9
AND tasks.assigned_user_id = '1'
AND projects_to_users.user_id = '1'
GROUP BY projects.project_id
RETURNS:
+--------------+--------------+--------+
+ task_count | project_id | name |
+--------------+--------------+--------+
+ 2 | 1 | Foo |
+--------------+--------------+--------+
SHOULD RETURN:
+--------------+--------------+--------+
+ task_count | project_id | name |
+--------------+--------------+--------+
+ 2 | 1 | Foo |
+--------------+--------------+--------+
+ 0 | 2 | Bar |
+--------------+--------------+--------+
【问题讨论】: