Rails 3:如何在Postgres中使用多个列跳过ORDER连接上的重复行

时间:2012-07-05 17:17:19

标签: ruby-on-rails postgresql activerecord

我有一个简单的HABTM关系书< - >作者和我希望通过其标题和作者姓名获得书籍:

Book.joins(:authors)
    .where("books.title ILIKE 'roman%' OR authors.name ILIKE 'pushkin%'")
    .order("books.id DESC").limit(20).group("books.id")

这很完美。

但是,如果我想按作者名称进行排序,那么对于有很多作者的书籍我会得到重复的行:

Book.joins(:authors)
    .where("books.title ILIKE 'roman%' OR authors.name ILIKE 'pushkin%'")
     .order("books.id DESC, authors.id DESC").limit(20).group("books.id, authors.id")

我有类似的东西:

id  | title  | ...
123 | Roman1 |   // this book has only 1 author
55  | roman2 |  
55  | roman2 |   // this one hase 2 authors
177 | Roman5 | ... 
etc.

如何在SQL查询(btw,Postgres 9.1)中按id合并这些行?

1 个答案:

答案 0 :(得分:0)

问题不是订单部分,而是按部分分组。如果你包括作者,那就意味着你也会在书和作者之间产生差异。

我建议你省略author.id,然后从代码中排序列表,而不是SQL。