База данных Key-Store / Двойные условия - PullRequest
1 голос
/ 09 ноября 2010

Я пытаюсь получить все идентификаторы пользователей, которые имеют свои предпочтения (IN (1,7) И (2)).Даже без группы по user_id.Не работаетЛюбая идея была бы очень полезна.

HasPreference.find(:all, :conditions  => ["preference_id IN (1,7) AND preference_id = 2"], :group  => :user_id)

TABLE - это 'has_preferences'

ID -- PREFERENCE_ID -- USER_ID

1  --       2       --    1

1  --       7       --    1

1  --       1       --    1

1  --       2       --    2

Я хотел бы получить [1] в результате.

Спасибо

Ответы [ 2 ]

1 голос
/ 09 ноября 2010
SELECT  user_id
FROM    has_preferences
WHERE   preference_id = 2
        AND user_id IN
        (
        SELECT  user_id
        FROM    has_preferences
        WHERE   preference_id IN (1, 7)
        )

Создайте индекс для (preference_id, user_id), чтобы он работал быстро.

1 голос
/ 09 ноября 2010

Я не знаю, как перевести это на Ruby, но я считаю, что следующий SQL-оператор удовлетворяет вашим требованиям.

Оператор SQL

SELECT  p.*
FROM    dbo.has_preferences p
        INNER JOIN (
          SELECT  User_ID
          FROM    dbo.has_preferences
          WHERE   Preference_ID IN (1, 7)
        ) pIN ON pIN.User_ID = p.User_ID
WHERE   p.Preference_ID = 2        
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...