Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL:仅获取结果集的计数_Php_Mysql - Fatal编程技术网

Php MySQL:仅获取结果集的计数

Php MySQL:仅获取结果集的计数,php,mysql,Php,Mysql,我将MVC与PHP/MySQL结合使用 假设我使用10个不同查询的函数从数据库中获取详细信息。 但在其他时候,我可能只想得到查询返回的结果的计数。 处理这种情况的标准方法是什么。 我是否应该再编写10个函数来复制几乎整个查询并只返回计数。 或 我是否应该始终将计数与结果集一起返回 或 我可以传递一个标志来指示函数应该只返回count,然后根据该标志动态生成查询的select部分。 或 有更好的办法吗 如果您只需要符合特定条件的行数,则不应使用结果计数,而应使用另一个只选择count*的查询 如果

我将MVC与PHP/MySQL结合使用

假设我使用10个不同查询的函数从数据库中获取详细信息。 但在其他时候,我可能只想得到查询返回的结果的计数。 处理这种情况的标准方法是什么。 我是否应该再编写10个函数来复制几乎整个查询并只返回计数。 或 我是否应该始终将计数与结果集一起返回 或 我可以传递一个标志来指示函数应该只返回count,然后根据该标志动态生成查询的select部分。 或
有更好的办法吗

如果您只需要符合特定条件的行数,则不应使用结果计数,而应使用另一个只选择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