Zend_Db_Select Выбрать значения не в определенной таблице - PullRequest
0 голосов
/ 23 сентября 2011

Я погуглил свой вопрос и прочитал кучу постов на форуме, но мне еще предстоит найти ответ, который я ищу. Надеюсь, кто-то здесь сможет мне помочь.

Для проекта, который я 'В здании я установил следующие 3 таблицы;пользователи, проекты и пользователи проекта.

Я создал форму, в которой я могу добавлять пользователей в проекты, сохраняя пока что userID и projectID в таблице projectUsers, ничего особенного.Форма содержит элемент select с идентификаторами пользователя, которые можно подключить к идентификатору проекта (скрытое поле).

Этот элемент формы заполнен запросом, настроенным с помощью Zend_Db_Select, он выбирает всех пользователей из таблицы пользователей и добавляет его в выборку.Однако я хочу отфильтровать этот результат, чтобы исключить всех пользователей, уже добавленных в этот конкретный проект.

Краткая версия: у меня есть элемент select, пользователи которого заполнены набором результатов из запроса базы данных (Zend_db_select), который я хочуэтот набор результатов должен быть удален из определенных идентификаторов пользователей.

Для дополнительной справки приведена схема таблицы ниже:

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 голосов
/ 23 сентября 2011

добавка к Soica Micea ans

$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();
0 голосов
/ 23 сентября 2011

Это выберет всех пользователей, которые не были добавлены в проект, и проигнорирует пользователей из 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();
...