Mysql(有条件的?)从两个表查询

标签 mysql sql yii

不确定我是否正确地表达了标题,但就这样吧。我有这两张表:

表:员工

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/

相关文章:

database - 具有附加级别的 RBAC

java - 使用 MySQL 填充 jTable

php - 网站-即使pass1和pass2之间有错误,用户也可以编辑密码

sql - Postgresql 和 jsonb - 将键/值插入多级数组

sql - 条件必须具有静态类型的 bool 值

yii - YII 中的 CGRIDVIEW 两表数据显示

mysql - SQL where 子句依赖于先前的 select 语句

php - LOAD DATA LOCAL INFILE 跳过列

SQLite 列别名

activerecord - 可以扩展 AR 关系吗?