Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 31.01.2016 12:46:42

Сумма полей таблицы

Здравствуйте. Подскажите пожалуйста, каким образом можно сделать например такой запрос:
SELECT (`collumn1`+`collumn2`)*`collumn3` FROM `table` ORDER BY (`collumn1`+`collumn2`)*`collumn3`?

Не в сети

#2 31.01.2016 13:08:47

duster
Откуда: Мельбурн
Сообщений: 148

Re: Сумма полей таблицы

Думаю только через raw запрос, DB::raw('SELECT (`collumn1`+`collumn2`) * `collumn3` AS `number` FROM `table` ORDER BY `number` DESC')

Можно попробовать вставить в query builder типа Eloquent::select(DB::raw('(`collumn1`+`collumn2`) * `collumn3` AS `number`'))->orderBy('number')->get()

Но так или иначе - частично будет raw запрос (а значит будет зависимость от выбранной базы данных -> тестировать не очень классно)

Не в сети

#3 31.01.2016 15:58:43

Re: Сумма полей таблицы

выброси order by
попробуй вот так - чего выплюнет?
DB::table('table')->selectRaw('((column1+column2)*column3) as result')->lists('result');

если выплюнет (у меня нет возможности проверить)
отсортируй через sort() средствами рнр

должно быть быстрее и проще.

Изменено hzone (31.01.2016 16:03:00)

Не в сети

#4 31.01.2016 17:02:28

Re: Сумма полей таблицы

hzone пишет:

DB::table('table')->selectRaw('((column1+column2)*column3) as result')->lists('result');

Этот запрос возвращает то что нужно. Но проблема в том, что мне нужно получить топ 10.

Не в сети

#5 31.01.2016 17:07:54

Re: Сумма полей таблицы

duster пишет:

Думаю только через raw запрос, DB::raw('SELECT (`collumn1`+`collumn2`) * `collumn3` AS `number` FROM `table` ORDER BY `number` DESC')

данный запрос просто возвращает всю таблицу, даже не сортируя

Не в сети

#6 01.02.2016 04:10:18

duster
Откуда: Мельбурн
Сообщений: 148

Re: Сумма полей таблицы

MadHatter пишет:
hzone пишет:

DB::table('table')->selectRaw('((column1+column2)*column3) as result')->lists('result');

Этот запрос возвращает то что нужно. Но проблема в том, что мне нужно получить топ 10.

Просто добавьте в цепочку orderBy('result')->pick(10)

Не в сети

#7 01.02.2016 09:49:00

Re: Сумма полей таблицы

Спасибо, поучилось
Добавил в цепочку ->take(10)->orderBy('result', 'DESC')
А не подскажите, где можно почитать про raw запросы, желательно на русском?

Не в сети

#8 01.02.2016 12:05:51

Re: Сумма полей таблицы

Я СКАЗАЛ ВЫБРОСИ ORDER BY
Сколько вас всех учить распределять нагрузку на железо РАВНОМЕРНО ?
Плоский массив прекрасно сортируется средствами РНР!

Не в сети

#9 01.02.2016 14:46:22

duster
Откуда: Мельбурн
Сообщений: 148

Re: Сумма полей таблицы

hzone пишет:

Я СКАЗАЛ ВЫБРОСИ ORDER BY
Сколько вас всех учить распределять нагрузку на железо РАВНОМЕРНО ?
Плоский массив прекрасно сортируется средствами РНР!

Метод orderBy есть и на коллекции (средства PHP) и на query builder (средства SQL базы), но если база и app крутятся на одном сервере - о какой равномерности идёт речь? Нагрузка на одной и той же машине.

Но подозреваю, что сервер SQL быстрее сортирует из-за индексации wink PHP будет сортировать простым перебором

Не в сети

#10 01.02.2016 15:03:13

Re: Сумма полей таблицы

Речь именно о распределении нагрузки.
Как думаешь что используется больше при работе с БД проц или память?
При том стоит посмотреть на реальную нагрузку на проц при выборке из бд (с сортировкой и без, с группировкой и без)... оч советую.
В случаях с mysql в 99% используется память/диск для выборки данных.
Если добавляем группировку/сортирвку-две, то использование проца (ПРИ ВЫПЁВЫВАНИИ ПЛОСКИХ МАССИВОВ) избыточнее, чем, если бы вы сортировали через sort()
О коллекциях тут речи нет, там сортировка более сложная и многоуровневая.

Изменено hzone (01.02.2016 15:06:42)

Не в сети

#11 01.02.2016 15:09:21

Re: Сумма полей таблицы

Да и стоит смотреть на проблему не в ключе одного запроса, а в ключе массового использоваания решения...
Зачастую на PHP рекурсивный метод с простым "select * from table where id=N" 100500 раз быстрее, чем 2-3 селекта с джойнами...

Не в сети

#12 01.02.2016 16:04:14

Re: Сумма полей таблицы

А если у меня таблицы, например из 10000 строк. И мне нужно выбрать топ 10 по сумме нескольких показателей. То все равно будет правильнее выбрать все 10000 строк, а потом отсортировать?

Не в сети

#13 01.02.2016 18:31:56

Re: Сумма полей таблицы

MadHatter пишет:

А если у меня таблицы, например из 10000 строк. И мне нужно выбрать топ 10 по сумме нескольких показателей. То все равно будет правильнее выбрать все 10000 строк, а потом отсортировать?

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

Не в сети

#14 01.02.2016 20:08:59

Re: Сумма полей таблицы

Ясно. Спасибо за ваши ответы.

Не в сети

Подвал раздела