Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将消息分组以显示概览中的最新消息_Sql_Ruby On Rails_Ruby_Activerecord_Group By - Fatal编程技术网

Sql 将消息分组以显示概览中的最新消息

Sql 将消息分组以显示概览中的最新消息,sql,ruby-on-rails,ruby,activerecord,group-by,Sql,Ruby On Rails,Ruby,Activerecord,Group By,我正在尝试在rails 3应用程序中以有组织的方式显示消息。我正在尝试按列表id对消息进行分组,并显示该会话中属于该列表的最新消息 我正在控制器中尝试以下语法: @messages = Message.all(:conditions => { :recipient_id => current_user.id }, :group => :listing_id, :order =>

我正在尝试在rails 3应用程序中以有组织的方式显示消息。我正在尝试按列表id对消息进行分组,并显示该会话中属于该列表的最新消息

我正在控制器中尝试以下语法:

@messages = Message.all(:conditions => { :recipient_id => current_user.id },
                        :group => :listing_id,
                        :order => "created_at DESC")
这成功地通过列表将我的消息分组在一起,但是它不会显示该组中的最后一条消息。它显示了最古老的一个


有人知道如何做到这一点吗?我尝试过使用:having子句,但到目前为止没有任何效果。

使用ActiveRecord时要熟悉的最重要的事情是查看输出日志。如果您是在本地主机上运行应用程序,由
rails服务器启动,那么您应该可以看到所有SQL输出到控制台中

我之所以说“检查您的SQL”,是因为您的方法不太合理。如果只想选择特定对话并检索其最后一条消息,则应执行以下操作:

@messages = Message.all(:conditions => 
                      { :recipient_id => current_user.id,
                        :listing_id => params[:listing_id] },
                        :order => "created_at DESC")
如果您试图为每个
列表
获取最后一条
消息
,那么您需要从不同的角度工作,如下所示:

@listings = Listings.all(:conditions => {:recipient_id => current_user.id},
                         :include => :messages,
                         :order => 'messages.created_at DESC')

last_messages_of_first_listing = @listings.first.messages.first

显示SQL表的DLL可能会有所帮助。您在
处创建了一个
字段,我假设在将行添加到表中时会设置该字段。当你说“最后一条消息”和“最早的消息”时,你能定义一下你的意思吗?如果你在
字段按
created\u排序,它们看起来是一样的。