рельсы 3, активная запись: любой способ узнать, сколько уникальных значений соответствует "x LIKE?"запрос - PullRequest
1 голос
/ 20 марта 2011

У меня есть запрос, чтобы найти все телефонные номера, которые соответствуют частичному выражению, например, «заканчивается 234»

@matchingphones = Calls.find :all, 
    :conditions => [ "(thephonenumber LIKE ?)", "%234"]

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

Мне нужно знать, какие УНИКАЛЬНЫЕ номера телефонов возвращает запрос.

Например, если база данных содержит

000-111-1234 *
000-111-3333
000-111-2234 *
000-111-1234 *
000-111-4444

существующий запрос вернет 3 записи, помеченные * (например, дважды возвращает один телефонный номер -1234, поскольку он находится в базе данных дважды)

мне нужен запрос, который возвращает только один раз для каждого совпадения, вэто дело

000-111-1234 *
000-111-2234 *

Ответы [ 2 ]

2 голосов
/ 20 марта 2011
Calls.find :all, 
    :select => "id, DISTINCT thephonenumber",
    :conditions => [ "(thephonenumber LIKE ?)", "%234"]

Кроме того,
1. Вы используете синтаксис запроса rails 2 .. лучше переключитесь на rails 3 (arel)
2. Лучше назови свой класс Call (не Calls)

0 голосов
/ 20 марта 2011
Call.where("thephonenumber LIKE ?", "%234").group(:thephonenumber)

если вы просто хотите считать, то вы можете сделать:

Call.where("thephonenumber LIKE ?", "%234").group(:thephonenumber).all.count
...