Zend_Db_Select选择不在特定表中的值

时间:2011-09-23 08:41:11

标签: php mysql zend-framework zend-db

我已经搜索了我的问题并阅读了一些论坛帖子,但我还没有找到答案,我希望有人可以帮助我。

对于我正在建设的项目,我已经设置了以下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 ;

提前致谢!

2 个答案:

答案 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();