如何执行搜索结果

时间:2012-12-12 16:26:10

标签: php sql

  

可能重复:
  MySQL pagination without double-querying?

我的网站上有一个搜索框,其中包括分页。

要设置分页,我必须知道匹配的数量,所以我有两个选择:

  1. 使用2个查询:查询页面中的X匹配(使用limit),以及查询总计匹配情况的查询。
  2. 使用1个查询:获取所有匹配项,然后我知道行数,然后使用array_slice
  3. 获取所需的行

    我认为解决方案#2更好,你怎么看?

2 个答案:

答案 0 :(得分:3)

在MySQL中,您可以在查询中添加SQL_CALC_FOUND_ROWS,然后运行SELECT FOUND_ROWS();

http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_found-rows

答案 1 :(得分:1)

答案实际上取决于您预期匹配的行数以及行中存储的数据大小。

传统的分页方法是使用SQL LIMIT子句返回整个结果集的子集。如果您确实需要知道完整数量的记录(为了显示完整数量的"页面"),您还需要制作SELECT COUNT(primary_key_field) FROM table WHERE [search condition]以获取该信息。

这通常会提供最佳结果,因为COUNT查询应该能够非常快速地执行,并且LIMIT查询将保持查询性能响应,只要您在用于排序的字段上有索引(就像您一样)始终需要ORDER BYLIMIT以保证订单)。这也意味着您需要在应用程序中保留更少的内存记录。

我认为可能存在一些使用案例,其中单个查询方法可能更好(即,不会有大量潜在的行,行数据大小很小),这样您就不会有检索完整结果集的内存使用量的巨大数据传输时间。

真的,你只需要在你的应用中测试一些场景,看看什么最适合你。