Каков самый простой и быстрый способ достичь предложения, в котором все элементы в массиве должны быть сопоставлены - не только при использовании IN
? В конце концов, он должен вести себя как mongodb $all.
Думая о групповых разговорах, где chat_users - таблица соединений между session_id и user_id. У меня есть что-то подобное:
WHERE (conversations_users.user_id ALL IN (1,2))
ОБНОВЛЕНИЕ 16.07.12
Добавление дополнительной информации о схеме и случае:
-
Таблица соединений довольно проста:
Table "public.conversations_users" Column | Type | Modifiers | Storage | Description -----------------+---------+-----------+---------+------------- conversation_id | integer | | plain | user_id | integer | | plain |
-
В разговоре много пользователей, и пользователь относится ко многим разговорам. Чтобы найти всех пользователей в разговоре, я использую эту таблицу соединений.
-
В конце концов, я пытаюсь выяснить рубин на рельсах
scope
, которые найдут мне разговор в зависимости от его участников - например:scope :between, ->(*users) { joins(:users).where('conversations_users.user_id all in (?)', users.map(&:id)) }
ОБНОВЛЕНИЕ 23.07.12
Мой вопрос - найти точное совпадение людей. Поэтому:
Разговор между (1,2,3)
не будет соответствовать, если запрос для (1,2)