我有一个简单的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
合并这些行?
答案 0 :(得分:0)
问题不是订单部分,而是按部分分组。如果你包括作者,那就意味着你也会在书和作者之间产生差异。
我建议你省略author.id,然后从代码中排序列表,而不是SQL。