gpt4 book ai didi

ruby-on-rails - ActiveRecord 按 2 列分组

转载 作者:行者123 更新时间:2023-12-04 06:31:35 25 4
gpt4 key购买 nike

消息模型

user_id      # owner of the message 
sender_id # user that sent message
receiver_id # user then recieved message
content # content of message

我有消息。我想按 sender_idreceiver_id 对它们进行分组,因为它们是“对话线程”。

当我进行分组时,我得到的结果如下

[1,3] => 5   # user 1 and 3 have 5 messages
[1,6] => 2 # user 1 and 6 have 2 messages
[3,1] => 3 # user 3 and 1 have 3 messages

确实,[1,3] 和 [3,1] 属于同一“组”。我怎样才能实现这个目标?

最佳答案

您可以通过使用 LEAST()GREATEST() 对您的 sender_idrecipient_id 进行排序来获取此信息(至少在 Postgres 和 MySQL 中)。

这是一个fiddle演示 SQL:

SELECT 
LEAST(sender_id, receiver_id),
GREATEST(sender_id, receiver_id),
count(*)
FROM messages
GROUP BY
LEAST(sender_id, receiver_id),
GREATEST(sender_id, receiver_id)

以及 ActiveRecord 等效项:

Message.group('LEAST(sender_id, receiver_id), GREATEST(sender_id, receiver_id)').count

关于ruby-on-rails - ActiveRecord 按 2 列分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30414618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com