получить первую строку каждой группы по активной записи - PullRequest
0 голосов
/ 08 ноября 2019

что я хочу:

    select * from messages where id in (select max(id) from messages where from_user_id=1 or to_user_id=1 group by from_user_id,to_user_id);

когда я делаю запрос по активной записи

msg_ids = Message.where("from_user_id=? or to_user_id=?",1,1).group(:from_user_id,:to_user_id).select("max(id)")

и я получаю вывод mysql

SELECT MAX(id) FROM `messages` WHERE (from_user_id=1 or to_user_id=1)  GROUP BY `messages`.`from_user_id` LIMIT 11

зачем ограничивать 11? и как я могу перебрать msg_ids?

1 Ответ

0 голосов
/ 08 ноября 2019

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

    sql = "select * from messages where id in (select max(id) from messages where from_user_id=#{self.id} or to_user_id=#{self.id} group by from_user_id,to_user_id)"
    Message.find_by_sql(sql)

, но все еще не понимаю, почему предел 11? проблема предела 11, к которой вы можете обратиться https://github.com/rails/rails/issues/30497

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...