我有一张桌子,上面有书籍,一张桌子上有作者,另一张桌子上有书籍和作者。一本书可以有多个作者,所以当我对this results进行大查询时,如果该书有多个作者,我每本书可能会得到多行。然后我将结果合并到PHP中,但问题是如果我对分页的查询进行限制 - OFFSET,我每页可能会得到少于25个(期望的)唯一书籍。
任何人都可以想到一种(或者有一种内置的)方式让LIMIT影响分组查询,但仍能获得所有结果吗?我宁愿不做一个分组查询,然后做其他查询来获取每个作者,因为我失去了缓存结果的好处。
如果没有,我可能会预先保存缓存的结果,然后分别查询每个作者。
答案 0 :(得分:1)
您可以使用两种方法:
ROW_NUMBER() OVER (PARTITION BY your_group)
,并仅选择行号为25或更少的行。第二个很难正确编写。
答案 1 :(得分:1)
我在不同的用例(影院预订系统)中遇到了同样的问题,经过一些研究和测试后,我使用了预通过法。它快速而干净,即使有大量行(在我的情况下,超过600k)也能很好地工作。希望能帮助到你! :)
答案 2 :(得分:1)
已经有一个已接受的答案,但我认为这可能有用。
GROUP_CONCAT
允许您将多行合并到MySQL查询中的单个行中。使用它,您可以将作者连接到列表中作为一个字段。
SELECT GROUP_CONCAT(author) FROM books GROUP BY book_id;
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat