【问题标题】:DISTINCT ON two fields MYSQL + railsDISTINCT ON 两个字段 MYSQL + rails
【发布时间】:2015-11-10 06:36:51
【问题描述】:

我有一个模型消息,它由:title,:description,:sender_id,:receiver_id 组成。所以消息模型的记录可能

  1. Message.first (id:1, title: "Sample1", description: "Test1", sender_id: 1, receiver_id: 2)

  2. Message.second (id:1, title: "Sample2", description: "Test2", sender_id: 3, receiver_id: 4)

  3. Message.second (id:1, title: "Sample3", description: "Test2", sender_id: 3, receiver_id: 4)

我想要一个根据 sender_id 和 receiver_id 给出不同记录的查询

在 Postgres 中 Message.select("DISTINCT ON (sender_id, receiver_id) *") 有效

但是MYSQL2报错请帮忙

编辑

从我这里解决

messages = [] 
messages << Message.all.to_a.uniq{|m| m.sender_id} 
messages << Message.all.to_a.uniq{|m| m.receiver_id} 
@messages = messages.flatten.uniq

【问题讨论】:

  • 你能打开 rails db 并尝试查询 select m1.* from messages AS m1 JOIN messages m2 ON m1.sender_id = m2.sender_id AND m1.receiver_id = m2.receiver_id GROUP BY m1.sender_id, co1.receiver_id HAVING m1.created_at = MAX(co2.created_at) 并告诉我你得到了什么。
  • distinct on 是 Postgres 特有的,所以你不能在 MySQL 中使用它。您应该发布整个查询。
  • @GordonLinoff Message.select("DISTINCT ON (sender_id, receiver_id) *") 是 Rails 中的一个查询,可以与 Postgresql 一起使用。 OP 知道.. 可能正在为 MySql 寻找类似的
  • 感谢 Anup 理解我的疑问并向@GordonLinoff 解释。不幸的是,您提供的查询不起作用。给出错误 ERROR 1054 (42S22): Unknown column 'co1.receiver_id' in 'group statement'
  • @GouravNaik 解决后你可以在这里给出答案,它可以帮助像我这样的其他人。

标签: mysql ruby-on-rails


【解决方案1】:

看来GROUP BY 应该没问题:

Message.group(:sender_id, :receiver_id)

【讨论】:

  • 这不是我想要的,您的查询将通过创建一组 id 来返回,我希望整个消息根据发送者和接收者 id 唯一性返回
  • GROUP BY 不会返回一组 id。它将返回一个(随机记录的)id。您将能够像往常一样使用该查询返回的 message 对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 2014-10-25
相关资源
最近更新 更多