Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Здравствуйте. Подскажите пожалуйста, каким образом можно сделать например такой запрос:
SELECT (`collumn1`+`collumn2`)*`collumn3` FROM `table` ORDER BY (`collumn1`+`collumn2`)*`collumn3`?
Не в сети
Думаю только через 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 запрос (а значит будет зависимость от выбранной базы данных -> тестировать не очень классно)
Не в сети
выброси order by
попробуй вот так - чего выплюнет?
DB::table('table')->selectRaw('((column1+column2)*column3) as result')->lists('result');
если выплюнет (у меня нет возможности проверить)
отсортируй через sort() средствами рнр
должно быть быстрее и проще.
Изменено hzone (31.01.2016 16:03:00)
Не в сети
DB::table('table')->selectRaw('((column1+column2)*column3) as result')->lists('result');
Этот запрос возвращает то что нужно. Но проблема в том, что мне нужно получить топ 10.
Не в сети
Думаю только через raw запрос, DB::raw('SELECT (`collumn1`+`collumn2`) * `collumn3` AS `number` FROM `table` ORDER BY `number` DESC')
данный запрос просто возвращает всю таблицу, даже не сортируя
Не в сети
hzone пишет:DB::table('table')->selectRaw('((column1+column2)*column3) as result')->lists('result');
Этот запрос возвращает то что нужно. Но проблема в том, что мне нужно получить топ 10.
Просто добавьте в цепочку orderBy('result')->pick(10)
Не в сети
Спасибо, поучилось
Добавил в цепочку ->take(10)->orderBy('result', 'DESC')
А не подскажите, где можно почитать про raw запросы, желательно на русском?
Не в сети
Я СКАЗАЛ ВЫБРОСИ ORDER BY
Сколько вас всех учить распределять нагрузку на железо РАВНОМЕРНО ?
Плоский массив прекрасно сортируется средствами РНР!
Не в сети
Я СКАЗАЛ ВЫБРОСИ ORDER BY
Сколько вас всех учить распределять нагрузку на железо РАВНОМЕРНО ?
Плоский массив прекрасно сортируется средствами РНР!
Метод orderBy есть и на коллекции (средства PHP) и на query builder (средства SQL базы), но если база и app крутятся на одном сервере - о какой равномерности идёт речь? Нагрузка на одной и той же машине.
Но подозреваю, что сервер SQL быстрее сортирует из-за индексации PHP будет сортировать простым перебором
Не в сети
Речь именно о распределении нагрузки.
Как думаешь что используется больше при работе с БД проц или память?
При том стоит посмотреть на реальную нагрузку на проц при выборке из бд (с сортировкой и без, с группировкой и без)... оч советую.
В случаях с mysql в 99% используется память/диск для выборки данных.
Если добавляем группировку/сортирвку-две, то использование проца (ПРИ ВЫПЁВЫВАНИИ ПЛОСКИХ МАССИВОВ) избыточнее, чем, если бы вы сортировали через sort()
О коллекциях тут речи нет, там сортировка более сложная и многоуровневая.
Изменено hzone (01.02.2016 15:06:42)
Не в сети
Да и стоит смотреть на проблему не в ключе одного запроса, а в ключе массового использоваания решения...
Зачастую на PHP рекурсивный метод с простым "select * from table where id=N" 100500 раз быстрее, чем 2-3 селекта с джойнами...
Не в сети
А если у меня таблицы, например из 10000 строк. И мне нужно выбрать топ 10 по сумме нескольких показателей. То все равно будет правильнее выбрать все 10000 строк, а потом отсортировать?
Не в сети
А если у меня таблицы, например из 10000 строк. И мне нужно выбрать топ 10 по сумме нескольких показателей. То все равно будет правильнее выбрать все 10000 строк, а потом отсортировать?
тогда да, без сортировки никуда.
но старайтесь искать более простые решения, они, все вместе в сумме, дают качество high-load
Не в сети
Ясно. Спасибо за ваши ответы.
Не в сети
Страницы 1