Php MySQL:仅获取结果集的计数
我将MVC与PHP/MySQL结合使用 假设我使用10个不同查询的函数从数据库中获取详细信息。 但在其他时候,我可能只想得到查询返回的结果的计数。 处理这种情况的标准方法是什么。 我是否应该再编写10个函数来复制几乎整个查询并只返回计数。 或 我是否应该始终将计数与结果集一起返回 或 我可以传递一个标志来指示函数应该只返回count,然后根据该标志动态生成查询的select部分。 或Php MySQL:仅获取结果集的计数,php,mysql,Php,Mysql,我将MVC与PHP/MySQL结合使用 假设我使用10个不同查询的函数从数据库中获取详细信息。 但在其他时候,我可能只想得到查询返回的结果的计数。 处理这种情况的标准方法是什么。 我是否应该再编写10个函数来复制几乎整个查询并只返回计数。 或 我是否应该始终将计数与结果集一起返回 或 我可以传递一个标志来指示函数应该只返回count,然后根据该标志动态生成查询的select部分。 或 有更好的办法吗 如果您只需要符合特定条件的行数,则不应使用结果计数,而应使用另一个只选择count*的查询 如果
有更好的办法吗 如果您只需要符合特定条件的行数,则不应使用结果计数,而应使用另一个只选择count*的查询 如果您同时需要数据和计数,为什么不在生成的数组中使用计数呢
另一种方法是使用一些可以同时返回数据和它的类;s计数,但不是每10个查询的不同类,而是一个数据库访问类。我通常会尝试在方法之间共享尽可能多的代码。一种可能性是: 具有一个选择和一个计数功能 每一个构建查询的特定部分 还有一个buildFromAndWhere函数,用于构建查询的公共部分。 并让select和count使用该选项 用伪代码编写,看起来可能有点像这样:
function select($params) {
return "select * "
. from()
. where($params)
. "limit 0, 10";
}
function count() {
return "count(*) as nbr "
. from()
. where();
}
function from() {
return "from table1 inner join table1 on ... ";
}
function where($params) {
// Use $params to build the where clause
return "where X=Y and Z=blah";
}
这样,在from和where函数中就有了尽可能多的通用代码——考虑到查询的困难部分经常出现,这是最好的
我更喜欢有两个单独的功能来选择和计数;我认为它使代码更容易阅读和理解
我不喜欢一种方法返回两个不同的结果数据列表和总计数的想法;我也不太喜欢传递标志的想法:查看函数的调用,你永远不会知道该参数的含义。我同意标志的想法 再编写10个函数和复制/粘贴代码对可读性毫无帮助。如果您总是返回计数,这意味着每当您只对计数感兴趣时,数据库仍然必须生成并传输完整的结果集,这可能会非常低效 有了旗子,你就有了
function getData($countOnly=false) {
// ...generate FROM and WHERE clause
if ($countOnly) {
$query = 'SELECT COUNT(*) '.$query;
} else {
$query = 'SELECT field1, field2, ...'.$query.' ORDER BY ...';
}
...
}
现在mysql支持子查询,您可以使用以下方法获取任何查询的计数:
$count_query="SELECT COUNT(*) FROM ($query)";
那有多难
然而,这种方法总是意味着您要运行两个查询,而不仅仅是一个我不确定MySQL是否一定能够使用缓存结果集进行计数的查询—请尝试一下,然后查看
如果您已经获取了整个结果集,那么在PHP中计算行数可能比发出另一个查询更快
MySQL中有两个函数在应用limit语句之前返回匹配行数:
SQL\计算\找到\行和找到\行
看
C