Уведомления

Группа в Telegram: @pythonsu

#1 Май 21, 2009 14:18:31

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

order_by вычисляемому полю

Как замутить на ОРМ аналог такого запроса:

SELECT * FROM `table` order by (id>5)
?



Офлайн

#2 Май 21, 2009 14:27:46

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

order_by вычисляемому полю

Прочитать документацию, немного подумать…
.objects.filter(id>5).order_by('id')

Отредактировано (Май 21, 2009 14:28:49)

Офлайн

#3 Май 21, 2009 14:31:57

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

order_by вычисляемому полю

Ferroman
.objects.filter(id>5).order_by('id')
а точно результат будет идентичен?)
В запросе же есть только сортировка никаких фильтров.



Офлайн

#4 Май 21, 2009 14:35:41

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

order_by вычисляемому полю

Нет не будет. А должен? Как по мне то такой запрос мне кажется весьма странным… Но, тем не менее.
Хотите абсолютно точно - пользуйтесь extra.

Офлайн

#5 Май 21, 2009 14:44:02

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

order_by вычисляемому полю

Ferroman
Как по мне то такой запрос мне кажется весьма странным…
ну может в таком контексте меннее странным покажется тогда) :
SELECT * FROM `text` order by (rating>0),date
про extra ниче не знаю - пойду читать коль посылают)



Офлайн

#6 Май 21, 2009 15:29:54

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

order_by вычисляемому полю

Все равно странный :)
Почему просто не сделать order_by('rating')?

Офлайн

#7 Май 21, 2009 16:08:51

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

order_by вычисляемому полю

Ferroman
Почему просто не сделать order_by('rating')?
Там такая задача на главной странице есть список объектов у которых есть рейтинг,
их нужно выводить по дате их создания (новые сверху) но при этом если у объекта отриц рейтинг то опускать его в самый низ, те первый критерий сортировки положительность рейтинга потом дата.

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



Офлайн

#8 Май 21, 2009 16:25:17

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

order_by вычисляемому полю

order_by('rating', ‘date’)
Тогда все нулевые будут и так внизу.

Офлайн

#9 Май 21, 2009 17:24:25

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

order_by вычисляемому полю

Ferroman
Тогда все нулевые будут и так внизу.
Но новые с + рейтингом не будут вверху)



Офлайн

#10 Май 21, 2009 18:02:45

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

order_by вычисляемому полю

Evg
А, нет, тогда не так Надо тогда сортировать по дате, а потом - по рейтингу. Тогда новые с высшим рейтингом будут вверху, в порядку убывания и даты, и рейтинга.
order_by('date', ‘rating’)
Проверьте.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version