Ruby on Rails / MySQL: как выполнить поиск в массиве с помощью OR? - PullRequest
0 голосов
/ 07 августа 2010

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

  named_scope :non_employees_and_beloning_to_users, lambda { |args|
    privacy = args[0]
    users = args[1]
    { :conditions =>  ["(visibility = ? && user_id = ?)", privacy, users] }
  }

, но в основном вышеприведенное приводит к следующему, и при вводе в редактор MySQL результаты не отображаются.Итак, я пришел к выводу, что это не правильный метод для поиска вещей в mySOL с массивом?

SELECT * 
FROM `proposals`  
WHERE visibility = '1,0' && user_id = '-1,8,9,11';

Я хочу, чтобы это имело эффект

visibility = (1 or 0 ) AND user_id = (-1 or 8 or 9 or 11)

Ответы [ 2 ]

1 голос
/ 07 августа 2010

Поскольку кажется, что у вас есть список значений видимости и пользователей, разделенных запятыми, вы можете использовать функцию MySQL IN ().Что-то вроде:

visibility IN (1,0) AND user_id IN (-1,8,9,11)

(дополнительную информацию об IN (см. Здесь): http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_in)

В качестве альтернативы вы можете преобразовать видимость и пользователей в массивы Ruby, а затем сгенерировать подобный код SQL вручную.

0 голосов
/ 07 августа 2010

Если args[0] и args[1] являются массивами идентификаторов, вы просто делаете это:

named_scope :non_employees_and_belonging_to_users, lambda { |args|
  privacy = args[0]
  users = args[1]
  { :conditions =>  ["visibility IN (?) AND user_id IN (?)", privacy, users] }
}

Вам нужно обернуть ? заполнителей в парены, чтобы SQL IN работал.Это должно сгенерировать:

SELECT * FROM `proposals` WHERE visibility IN (1,0) AND user_id IN (-1,8,9,11);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...