2010-09-27 3 views
1

У меня есть модель Rails модели под названием Orders, у которой есть тип_ид, местоположение и цена. Каждый тип может иметь несколько заказов в одном месте с разными ценами. Ниже дается представление о структуре таблицы.Ruby on Rails получает записи по самой высокой цене

id | type_id | location_id | price 
----------------------------------- 
1 | 1  | 1   | 12 
2 | 1  | 1   | 14 
3 | 1  | 1   | 9 
4 | 2  | 1   | 1 
5 | 2  | 1   | 4 
6 | 3  | 1   | 15 
7 | 3  | 1   | 7 

Я в основном хотел, чтобы выбрать все записи по TYPE_ID используя IN пример:

type_ids = "1,2,3" 
location_id = 1 

Order.find(:all, :conditions => ["location_id = ? and type_id in (?)", location_id, type_ids]) 

Я только хочу, чтобы выбрать запись с самой высокой ценой для каждого типа в этом месте, так что результат set вернет записи с идентификаторами 2, 5 и 6.

Как представляется, я не могу найти запрос на поиск, надеюсь, вы понимаете, что я имею в виду. Если не спросить, я могу попробовать и объяснить лучше.

Приветствие

Eef

ответ

2

Если вы просто хотите, единственную высокую котировку для условий, вы можете использовать

Order.find(:first, :conditions => ["location_id = ? and type_id in (?)", location_id, type_ids], :order => 'price DESC') 

... потому что запрос будет заказать совпадающие записи с самого высокого к самой низкой цене, то дайте вам первую запись (самая высокая цена).

Если вы хотите деталь высочайших цен для каждого типа, вы, вероятно, вырываясь из построения запросов Rails, и с помощью find_by_sql к get the max(price) for each instance of type_id (что-то вроде SELECT *, MAX(price) FROM orders WHERE location_id = ? AND type_id IN (?) GROUP BY type_id, но я хочу, чтобы запустить этот запрос несколько раз против вашей базы данных, чтобы уточнить ее, сам).

Если ваш номер type_id s очень велик (например, в сотнях), может быть проще просто выполнить вышеуказанный запрос один раз для каждого типа и поместить все результаты в один массив; запрос MySQL будет намного быстрее, особенно для большого числа type_id, но выполнение этого в Rails будет достаточно хорошим, если вы не решите получить запрос MAX(price) Just Right.

+0

I originaly написал приложение в PHP, и я делал запрос к базе данных для каждого типа, он работал нормально. У меня никогда не будет более 44 типов, поэтому я думаю, что я могу использовать более простой подход, но я также дам запрос bash. Спасибо за это! – RailsSon

Смежные вопросы