【问题标题】:MySQL/ASP Paging, COUNT with LIMITMySQL/ASP 分页,使用 LIMIT 计数
【发布时间】:2011-09-19 17:30:59
【问题描述】:

我正在尝试重建我的页面以从老式记录集分页转到 LIMIT 分页。这将阻止我的查询在确实不需要时尝试加载 100,000 行。

我遇到的问题是获取该搜索的所有记录的计数。之前,我是通过这样做来获得结果的数量:

recordCount = rsPhotoSearch.RecordCount

但现在我将查询限制为 30,每页显示 30 条记录,我的“recordCount”只显示 30,而不是应该的 100,000。

那么我应该如何获取该搜索的总记录数,而不遍历所有 100,000 行,这对我来说似乎违反了使用 LIMIT 方法?我可能可以运行一个单独的查询,同样的,只是为了计算记录 - 但那是否实用,因为这也将通过 100,000 行来计算?

如往常一样,感激地收到任何帮助:)

来自迷茫的人

【问题讨论】:

标签: mysql sql database asp-classic


【解决方案1】:

你好。使用SQL_CALC_FOUND_ROWS 创建查询,然后通过FOUND_ROWS() 函数获取它。
我的意思是:

Set rsPhotoSearch = _
conn_Object.Execute("Select SQL_CALC_FOUND_ROWS * FROM table LIMIT offSet, rowCount")
Dim lngTotalRecords
lngTotalRecords = conn_Object.Execute("Select Found_Rows();")(0).Value
Response.Write "Total Records : "& lngTotalRecords 
'Loop starts
'etc

【讨论】:

  • 这看起来很有希望。我不熟悉这种格式。而不是 (Select SQL_CALC_FOUND_ROWS * FROM table) 我可以做这样的事情吗 (Select SQL_CALC_FOUND_ROWS, photoID, dateCreated FROM table)?
  • 当然可以,但不应在SQL_CALC_FOUND_ROWS 后面加逗号。
【解决方案2】:

您不需要获取所有行。只需计算所有内容:

select count(*)
from (
    <whatever is your main query goes here, without LIMIT>
)

【讨论】:

  • 感谢您的意见...在我选择答案之前,我必须根据 Kul-Tigin 的建议测试您的建议,看看哪个更快。通过查看 Kul-Tigin,我可以从一个查询中获得计数和结果,而您的看起来需要两个查询
  • 我已经测试过你的了,看起来很快,我很惊讶这么快。我一直认为 (select count(*) from tbl) 的性能与 (select photoID from tbl) 相同或更差,但显然要快得多
  • 我对此很满意。现在它正在工作,而且工作速度很快,我认为没有必要尝试其他解决方案。谢谢你的回答:)
【解决方案3】:

你是对的,你仍然需要扫描你的索引来计算行数

我会质疑显示记录数有多大用处?

如果您自己计算记录数(而不是使用SQL_CALC_FOUND_ROWS),您可以限制扫描的行数并提高性能。

【讨论】:

  • 我需要向用户显示通过搜索找到了多少张照片。我还需要计算会有多少页,所以如果用户想要每页 40 条记录,那么我需要做 (recordCount/40)
  • 这就是我的想法。一旦你得到很多结果,它将变得多么有用......例如第 1 页,共 3000 页,有人会使用它吗?
  • 我理解你的意思,但是我怎样才能计算出有多少页来显示记录集分页链接?
  • 我想你只需要知道是否有超过 page_size*max_number_of_pages 条记录,(然后弄清楚你想如何处理“下一个”案例)看看谷歌是怎么做的。跨度>
猜你喜欢
  • 2011-03-19
  • 2013-12-20
  • 2020-12-30
  • 1970-01-01
  • 2018-05-10
  • 2011-06-27
  • 2012-07-28
  • 2013-06-24
  • 1970-01-01
相关资源
最近更新 更多