我确信有更好的方法来做到这一点。它查看applications
表并收集每个作业的特定状态的所有应用程序。优化复杂的SQL查询
所以它看起来像这样:
pending | screened | interviewed | accepted | offer | hired | job title
0 0 0 0 0 2 dirt mover
2 0 1 1 0 1 tree planter
7 2 1 1 1 3 hole digger
这里是SQL(与可读性去除多余的工会列,如果你可以调用这个查询可读)
select sum(pending) as pending, sum(screened) as screened, sum(interviewed)
as interviewed, sum(accepted) as accepted, sum(offer) as offer, sum(hired)
as hired, sum(declined) as declined, sum(rejected) as rejected, title, jobid
from
(
(select count(j.job_id) as pending, j.title as title, j.job_id as jobid from
applications a, jobs j where j.job_id = a.job_id and status = 'Pending' group by
j.job_id)
union
(select count(j.job_id) as screened, j.title as title, j.job_id as jobid from
applications a, jobs j where j.job_id = a.job_id and status = 'Screened' group by
j.job_id)
union
(select count(j.job_id) as interviewed, j.title as title, j.job_id as jobid from
applications a, jobs j where j.job_id = a.job_id and status = 'Interviewed' group by
j.job_id)
union
(select count(j.job_id) as accepted, j.title as title, j.job_id as jobid from
applications a, jobs j where j.job_id = a.job_id and status = 'Accepted' group by
j.job_id)
union
(select count(j.job_id) as offer, j.title as title, j.job_id as jobid from
applications a, jobs j where j.job_id = a.job_id and status = 'Offer Made' group by
j.job_id)
union
(select count(j.job_id) as hired, j.title as title, j.job_id as jobid from
applications a, jobs j where j.job_id = a.job_id and status = 'Offer Accepted' group
by j.job_id)
union
(select count(j.job_id) as declined, j.title as title, j.job_id as jobid from
applications a, jobs j where j.job_id = a.job_id and status = 'Offer Declined' group
by j.job_id)
union
(select count(j.job_id) as rejected, j.title as title, j.job_id as jobid from
applications a, jobs j where j.job_id = a.job_id and status = 'Rejected' group by
j.job_id)
) as summ group by title order by title
下面是SHOW CREATE TABLE应用
CREATE TABLE IF NOT EXISTS `applications` (
`app_id` int(5) NOT NULL auto_increment,
`job_id` int(5) NOT NULL,
`status` varchar(25) NOT NULL,
`reviewed` datetime NOT NULL,
PRIMARY KEY (`app_id`),
UNIQUE KEY `app_id` (`app_id`),
KEY `job_id` (`job_id`),
KEY `status` (`status`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2720 ;
下面是SHOW CREATE TABLE工作
CREATE TABLE IF NOT EXISTS `jobs` (
`job_id` int(5) NOT NULL auto_increment,
`title` varchar(25) NOT NULL,
PRIMARY KEY (`app_id`),
KEY `job_id` (`job_id`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
你需要什么?你期望从查询中得到什么? – santiagobasulto
结果集超过11秒。结果表格在我的问题的顶部。 –
使用InnoDB !!!!!! – santiagobasulto