不确定我是否正确地表达了标题,但就这样吧。我有这两张表:
表:员工
id Name groupId Status
1 John Smith 1 1
2 John Doe 1 1
3 Jane Smith 2 1
4 Jerry Smith 1 1
表:作业队列
id job_id staff_id jobStatus
1 1 1 1
2 2 1 1
3 5 2 1
4 7 3 0
现在,我需要做的是通过查询 jobqueue 表找到分配给他的工作量最少的员工。
SELECT min(cstaff),tmp.staff_id FROM (SELECT t.staff_id, count(staff_id) cstaff from jobqueue t join staff s on t.staff_id=s.id join group g on s.groupId=g.id where g.id=26 GROUP BY t.id ) tmp
这工作正常,但问题是如果员工根本没有分配给任何工作,这个查询将不会得到他们,因为它只查询工作队列表,其中特定员工没有任何条目。我需要修改查询以包括员工表,如果员工没有在工作队列中分配任何工作,那么我需要从员工表中获取员工详细信息。基本上,我需要为一个没有分配任何工作的团队找到员工,如果所有员工都分配了工作,那么找到分配的工作最少的员工。可以使用一些帮助。另外,标记为 Yii,因为我想知道这是否适用于 Yii 事件记录。但是我可以接受将与 Yii sql 命令一起使用的普通 sql 查询。
最佳答案
不确定它是否是最佳查询,但它有效:
select d.groupId, d.name, (select count(*) from jobqueue as e where e.staff_id=d.id) as jobassigned
from staff as d
where d.id in (
select
(
select a.id
from staff as a
left outer join
jobqueue as b
on (a.id = b.staff_id)
where a.groupId = c.groupId
group by a.id
order by count(distinct job_id) asc
limit 1
) as notassigneduserid
from (
select distinct groupId from staff
) as c)
可能需要一些意见:
c
查询需要获取所有不同的 groupId - 如果你有单独的表,你可以替换它
notassigneduserid
statement for each groupId select user with minimal job count
d
需要查询来获取实际用户名,所有找到的“未分配用户”的 groupId 并显示它
这里是问题数据的结果:
Group Staff Jobs assigned
1 Jerry Smith 0
2 Jane Smith 1
关于Mysql(有条件的?)从两个表查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19398018/