【发布时间】:2014-05-15 14:37:34
【问题描述】:
好吧,也许标题有点不清楚,但我正在尝试根据他们的地理区域和他们负责的工作量(即人数符合某些条件的项目)。
对于这个任务,我使用了 5 个表(我将只写相关的列):
users
-------------------------------
ID(PK) | first_name | last_name
users_data
----------------------------------
ID(PK) | user_id(FK) | area_id(FK)
projects
---------------------
ID(PK) | agent_id(FK)
states (working phases)
-------------
ID(PK) | name
projects_states (relation table)
------------------------------------------------------------
ID(PK) | project_id(FK) | state_id(FK) | created_ad (TSTAMP)
一句话:我需要居住在特定区域 (area_id) 的所有代理 (agent_id),并且我需要此列表按项目数量 (ASC) 排序,但我需要仅考虑(计数)那些属于一组状态的项目(例如,“开放”、“进行中”等)。
示例输出:
[firstName] [lastName] [projectNo]
Agent Six (0)
Agent One (0)
Agent Three (1)
Agent Two (3)
Agent Four (4)
我试过这个查询:
SELECT COUNT(p.id) AS projectNo, u.*,
(SELECT ps.state_id FROM project_states ps WHERE ps.project_id = p.id
ORDER BY ps.created_at DESC LIMIT 1) AS last_state
FROM users u
JOIN users_data ud ON ud.user_id = u.id
JOIN projects p ON p.agent_id = u.id
WHERE ud.area_id = 1
GROUP BY u.id
HAVING last_state IN (4,5,6,7)
ORDER BY projectNo DESC
查询有效,但当然只获取(非常有限的)在该状态范围内拥有项目的用户。如果我删除 HAVING 部分,我会得到所有用户(这就是我想要的)但会产生错误的计数,因为它不应该计算分配给该用户但不在状态范围内的项目,即如果项目state_id 为 8,不需要统计。
我觉得我遗漏了一些明显的东西,但我已经尝试了一段时间并且无法理解它。
【问题讨论】:
标签: mysql sql count relationship