PostgresSQL. Проверка наличия нескольких записей по комбинации полей.

Krisha

pain in the neck
PostgresSQL. Проверка наличия нескольких записей по комбинации полей.

Существует массив, каждый элемент которого - это запись о пользователе. В записи хранится следующая информация:

- UserID (это не id из базы, а личный уникальный номер, нечто вроде номера на житоне у полицейского)
- Name
- Email

Мне необходимо сделать выборку id тех записей в базе, у которых совпадает комбинация UserID+Name+Email. Понятно, что можно сделать n запросов к базе, где n - кол-во записей в массиве, но это совсем неоптимально. Возможно ли сделать это одним запросом ?
 

Profic

just Profic (PHP5 BetaTeam)
хм, в голову пришла такая пурга. Может они и есть пурга :)
PHP:
$sql = 'select id from table where (userid || name || email) = ' . $arr['userid'] . $arr['name'] . $arr['email'];
C синтаксисом pg не знаком в деталях, но идея думаю понятна :)
 

su1d

Старожил PHPClubа
не знаю точно, есть ли в PgSql функция CONCAT_WS() (аналог точно есть), но объединять строки лучше с каким-нибудь хитрым разделителем, иначе когда-нибудь могут вылезти косяки, которые будешь неделю искать, а как найдёшь -- долго материться =)
 

Profic

just Profic (PHP5 BetaTeam)
Хм, сорри не до конца понял вопрос

тогда идея такая, же только делать where ... in (и тут полное перечисление)
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
запихать массив во временную таблицу, дальше запрос с JOIN, GROUP BY и HAVING...
 

Krisha

pain in the neck
Profic
Да, вот что-то на подобии where ... in мне и нужно, только я не знаю как правильно описать, чтобы в этом самом in была комбинация userid name email, userid name email и т.д.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Krisha
Profic
Да, вот что-то на подобии where ... in мне и нужно, только я не знаю как правильно описать, чтобы в этом самом in была комбинация userid name email, userid name email и т.д.
ты можешь сделать
Код:
... WHERE (поле1, поле2, поле3) IN (SELECT другое_поле1, другое_поле2, другое_поле3 ...)
но для этого записи всё же должны быть в таблице.
 
Сверху