我已经搜索了我的问题并阅读了一些论坛帖子,但我还没有找到答案,我希望有人可以帮助我。
对于我正在建设的项目,我已经设置了以下3个表格;用户,项目和项目用户。
我已经设置了一个表单,通过在projectUsers表中保存userID和projectID到目前为止,我可以将用户添加到项目中。表单包含一个select元素,其userID可以连接到projectID(隐藏字段)。
此表单元素填充了使用Zend_Db_Select设置的查询,它从users表中选择所有用户并将其添加到select。但是,我希望过滤该结果,以便排除已添加到该特定项目的所有用户。
简短版本:我有一个select元素,用户填充了(Zend_db_select)数据库查询的结果集我希望从某些用户ID中删除该结果集。
如需额外参考,请参阅下表:
CREATE TABLE IF NOT EXISTS `projects` (
`projectID` int(11) NOT NULL AUTO_INCREMENT,
`projectName` varchar(255) NOT NULL
PRIMARY KEY (`projectID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `projectUsers` (
`projectUserID` int(11) NOT NULL AUTO_INCREMENT,
`projectID` int(11) NOT NULL,
`userID` int(11) NOT NULL
PRIMARY KEY (`projectUserID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `users` (
`userID` int(11) NOT NULL AUTO_INCREMENT,
`userFirstName` varchar(255) DEFAULT NULL,
`userLastName` varchar(255) DEFAULT NULL
PRIMARY KEY (`userID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
提前致谢!
答案 0 :(得分:0)
这将选择尚未添加到项目中的所有用户并忽略来自arrayOfUserIds的用户
select()->from('users', '*')
->joinLeft('projectUsers', 'projectUsers.projectUserID = users.userID', null)
->where('projectUsers.projectID = ?', someProjectID)
->where('projectUserID is null')
->where('users.userID not in (?)', arrayOfUserIds)
->query()->fetchAll();
答案 1 :(得分:0)
$blackList = array(1,3,5,6); //user id which you want to exclude
$db->select()->from('users', '*')
->joinLeft('projectUsers', 'projectUsers.projectUserID = users.userID', null)
->where('projectUsers.projectID = ?', someProjectID)
->where('projectUserID is null')
->where('users.userID not in (?)', implode(',',$blackList))
->query()->fetchAll();