[英]Zend_Db_Select Select values not in specific table
我已经用Google搜索了我的问题并阅读了很多论坛帖子,但是我还没有找到我所需要的答案,希望这里有人可以帮助我。
对于我正在构建的项目,我设置了以下3个表; 用户,项目和projectUsers。
我已经建立了一个表单,可以通过将userID和projectID保存到projectUsers表中来添加用户到项目,到目前为止没有什么特别的。 该表单包含一个带有用户ID的select元素,该用户ID可以连接到projectID(隐藏字段)。
该表单元素填充有使用Zend_Db_Select设置的查询,它从users表中选择所有用户并将其添加到select中。 但是,我想过滤该结果,以便它排除已经添加到该特定项目的所有用户。
简短版本:我有一个select元素,其中的用户填充了(Zend_db_select)数据库查询中的结果集,我希望将该结果集从某些userID中删除。
有关其他参考,请参见以下表格方案:
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 ;
提前致谢!
这将选择所有尚未添加到项目中的用户,并忽略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();
对Soica Micea ans的addint
$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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.