【发布时间】:2016-01-25 16:28:55
【问题描述】:
我有一个工人表和一个关联的卡片表:
CREATE TABLE IF NOT EXISTS `workers` (
`ID` varchar(20) NOT NULL,
`companyID` int(11) NOT NULL,
`FName` varchar(25) NOT NULL,
`Sname` varchar(25) NOT NULL,
`isAvailable` tinyint(4) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `workers`
ADD PRIMARY KEY (`ID`), ADD KEY `cmp_idx` (`companyID`), ADD KEY `isAvailable_idx` (`isAvailable`);
我需要检索一份工人名单,每个工人都有一个指示他们的卡是否未获批准。
卡片表如下:
CREATE TABLE IF NOT EXISTS `cards2` (
`ID` int(11) NOT NULL,
`Name` varchar(200) NOT NULL,
`WorkerID` varchar(20) NOT NULL,
`pic` varchar(200) NOT NULL,
`expDate` bigint(20) NOT NULL,
`reminderSent` tinyint(4) NOT NULL,
`regNum` varchar(8) NOT NULL,
`cardType` varchar(200) NOT NULL,
`approvalStatus` tinyint(4) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=95 DEFAULT CHARSET=latin1;
ALTER TABLE `cards2`
ADD PRIMARY KEY (`ID`), ADD KEY `cardsWorkerID_idx` (`WorkerID`);
approvalStatus 可以是 2(尚未确定)、1(已批准)或 2(未批准) 因此,返回的指示符应仅在所有卡片均已获批准时为绿色 (1),如果任何卡片尚未获批准或未获批准,则应为红色 (0)。
检索工人的查询很简单:
SELECT distinct Workers.ID, FName, SName, companyID
FROM Workers WHERE companyID = ? and
and isAvailable = 1
LIMIT ?, 10
在尝试取回卡片指示器时,我尝试了以下操作:
SELECT Workers.ID, FName, SName,
COUNT(CASE WHEN approvalStatus = 0 or approvalStatus = 2 THEN 1 ELSE 0 end) AS cardStatus
FROM `workers`
inner join cards2 ON Workers.ID = Cards2.WorkerID
WHERE workers.companyID = 1
这只是返回一名工人
更新 如果用户没有关联的卡片,它还应该标记红色状态
【问题讨论】: