【发布时间】:2015-11-10 06:36:51
【问题描述】:
我有一个模型消息,它由:title,:description,:sender_id,:receiver_id 组成。所以消息模型的记录可能
Message.first (id:1, title: "Sample1", description: "Test1", sender_id: 1, receiver_id: 2)
Message.second (id:1, title: "Sample2", description: "Test2", sender_id: 3, receiver_id: 4)
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