【发布时间】:2010-11-14 13:18:51
【问题描述】:
我知道mysql_num_rows ( resource $result ),但我在某处读到它不是 100% 准确的。我已经看到其他替代方案实际上得到每一行并运行一个计数器,但这听起来效率很低。我有兴趣了解其他人如何获得准确有效的计数。
【问题讨论】:
我知道mysql_num_rows ( resource $result ),但我在某处读到它不是 100% 准确的。我已经看到其他替代方案实际上得到每一行并运行一个计数器,但这听起来效率很低。我有兴趣了解其他人如何获得准确有效的计数。
【问题讨论】:
mysql_num_rows() 是准确的,只要您不使用mysql_unbuffered_query()。
如果您使用的是mysql_query(),mysql_num_rows() 是准确的。
如果您使用mysql_unbuffered_query(),mysql_num_rows() 将返回错误结果,直到检索到所有行。
【讨论】:
当您完成 SELECT 或 SHOW 查询时使用 mysql_num_rows() 并在 INSERT, UPDATE, REPLACE or DELETE 查询时使用 mysql_affected_rows()。
两者都足够准确!
【讨论】:
这将有助于准确了解您对行数所做的工作,但我假设它适用于非常标准的分页结果集应用程序。
发出两个查询。第一个是具有第二个的所有 WHERE 条件的 COUNT 查询。第二个用于获取行。当你只打算显示其中的 10 行时,要么是这个,要么将 1000 行加载到内存中。
但是,如果您需要保证准确性,则必须将这两个查询包装在一个读取一致性事务中。否则,恰好在计数和数据查询之间运行的查询可能会使分页信息无效。
【讨论】: