我有一个问题,关于如何在以mysql作为数据库的服务器端进行分页工作。我已经弄清楚了大部分,它工作得很好,但是我在想有什么办法可以消除计数查询。假设用户搜索了jack单词,结果计数是25分页,每页10条。我的分页器需要知道所有行的数量才能在分页器中显示正确的数量。因此,我现在的操作方式是,首先使用这样的sql查询来获取与该条件相对应的所有行的计数:
"SELECT COUNT(id) AS count FROM " + table + query
然后我对这样的数据库执行另一个查询,该数据库使用LIMIT和OFFSET选项获得确切的页面:
"SELECT * FROM " + table + query + " LIMIT ? OFFSET ?"
然后我将两个对象返回给客户端。首先是所有行的计数,以及用户现在需要查看的行的秒数。我的问题是这是最有效的方法还是有更好的方法呢?
答案 0 :(得分:0)
我没有发现您的方法有任何问题(尽管您可以一次将查询发送到数据库)。使用数据库中的传统分页方法,您必须知道总记录,因此,这就是获取计数的方法。
改进主要是以不同的方式进行的。
改进1:无限滚动,这是分页技术。可能不是您想要的,但是我们看到越来越多的网站采用这种方式。用户是否真的需要知道多少页才能进行自由文本搜索?
改进2:使用ElasticSearch,而不是数据库。它是为免费文本搜索而构建的,肯定会比数据库表现更好。您还可以在一个搜索请求中获得计数(点击数)和页面。
答案 1 :(得分:0)
您可以通过一个查询来实现这一点,但是它将给输出数据带来负担,例如,如果限制了1000条记录,那么total_records将显示结果集中所有行的1000次。但同时,它将减少1条查询:
SELECT
column1,
column2,
column3,
(SELECT COUNT(id) FROM `table`) AS total_records
FROM
`table`
LIMIT 0, 10