169 похожих чатов

Скажите пожалуйста как вы решаете данную проблему. Допустим есть модель User

и колонка agent_id.
На выводе если есть дубли по agent_id, то сгруппируется и выводится как одна строка, а внутри этой строки инфо что там 2 или более раз встречается этот агент.
Но суть в чем?
В том что если надо делать пагинацию page(1).per(20) и вывести надо 20 штук, то в выводе может оказаться 5 штук например из-за сгруппирования.
Как можно сделать запрос в БД так, чтобы вывести больше 20 записей, чтобы в итоге вышло 20 записей на отображении?

18 ответов

61 просмотр

Выглядит как обычный group by. Если на последней странице оно тоже схлопнется то проблемы не вижу. Пагинацию тоже по group by считать

>Как можно сделать запрос в БД так, чтобы вывести больше 20 записей, чтобы в итоге вышло 20 записей на отображении? Надо не выводить больше записей в надежде что те 100 агентов у одного юзера перекроются, а пагинировать по сгруппированным результатам.

Eldar-Bahmudov Автор вопроса
Alex Ilizarov
Выглядит как обычный group by. Если на последней с...

Как ты это себе представляешь? Можешь примерный запрос написать? Просто не однозначно, так как group_by это метод руби

Eldar Bahmudov
Как ты это себе представляешь? Можешь примерный за...

В зависимости от контекста, если мы про Array.group_by то это рубильный метод из стандартной библиотеки, но ActiveRecord.group_by не из стандартной библиотеки

Eldar Bahmudov
Нет. Запрос в БД надо делать

Извиняюсь, перепутал с чемто другим, у актив рекорда есть метод .group который группирует по ключам

то есть ты хочешь для 20 различных agent_id вывести по 20 users с этим agent_id? ну что-то типа такого ( не уверен что работает, мог где-то ошибиться ) class Agent < AR has_many :users has_many :latest_users, -> { order(created_at: :desc).limit(20) }, class_name: 'User' end Agent.limit(20).includes(:latest_users).each do |agent| agent.latest_users # 20 юзеров для каждого agent end

Eldar-Bahmudov Автор вопроса
Eldar Bahmudov
Суть не в этом, а в дублях

Тогда не понял что надо надо сделать)

Eldar Bahmudov
Как ты это себе представляешь? Можешь примерный за...

GROUP BY это конструкция sql. group рельсовый это конструкция active record которая поверх него делает абстракцию.

Eldar Bahmudov
Суть не в этом, а в дублях

Я все еще не понимаю в чем проблема если на последней странице у тебя меньше элементов из-за группировки. На всех остальных страницах всегда полный набор будет.

Eldar-Bahmudov Автор вопроса
Alex Ilizarov
Я все еще не понимаю в чем проблема если на послед...

Почему не понимаешь в чем суть? Ну ты из БД запрашиваешь на первой странице 20 штук, а после обработки там может быть 15 штук, а в действительности надо вывести постранично столько, чтобы вышло 20 штук после обработки.

Eldar Bahmudov
Почему не понимаешь в чем суть? Ну ты из БД запраш...

Это ты не понимаешь как GROUP BY с пагинацией работает. Тебе уже прилетает из базы ровно 20 штук на страницу уже схлопанных результатов, и количество страниц ты тоже через группировку считаешь

Eldar-Bahmudov Автор вопроса
Alex Ilizarov
Это ты не понимаешь как GROUP BY с пагинацией рабо...

Просто в group by если не указать все поля, что в select, появляется ошибка

Eldar Bahmudov
Просто в group by если не указать все поля, что в ...

Потому что надо с group by и агрегауиямт в sql практиковаться и понимать как оно работает

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта