1

我有一个简单的 HABTM 关系 Books <-> Authors,我想通过书名和作者姓名获取书籍:

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.

如何id 在 sql 查询(顺便说一句,Postgres 9.1)中合并这些行?

4

1 回答 1

0

问题不在于顺序部分,而在于按部分分组。如果您包括作者,则意味着您在书和作者之间也有所不同。

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

于 2012-07-05T18:08:03.993 回答