我需要一个MySql语句来选择所有行,以及总行数.
我在用
mysql_query("SELECT * FROM posts LIMIT 0, 5");
Run Code Online (Sandbox Code Playgroud)
...试图添加计数:
mysql_query("SELECT *, COUNT(*) AS total FROM posts LIMIT 0, 5");
Run Code Online (Sandbox Code Playgroud)
...但只返回一行.
此外,如果有更好的方法来获得总数而不是为每一行添加额外的列,那么我希望相反.谢谢!
我需要一个MySql语句来选择所有行,以及总行数.
从字面上看,这是不可能的.SQL查询的结果是(虚拟)表; 该结果表中每行中的列提供仅与该行关联的值,并且这些行实际上彼此独立.
有很多方法可以获取整个结果的行数,但它可以在两个语句中完成,也可以在概念上与您拥有的查询不同.(以下解决方案)
您原始问题中的一个方面可以通过多种方式进行解释:
以及总行数
这可能意味着:
(我会在下面给出答案)
但这只返回一行.我猜这是因为COUNT(*)对于每一行都是相同的,并且出于某种原因,MySql只返回具有唯一值的行?我没有线索.
COUNT是一个聚合函数.通过使用聚合函数,您要求数据库将行组合在一起并将其某些方面投影到一行中.令人困惑的是,mysql也可以在同一个SELECT列表中混合使用非聚合和聚合表达式.大多数其他数据库不允许这样做,并为此提供错误,但唉MySQL没有.
但COUNT(*)仍将所有行聚合为一行,代表整个行组.
此外,如果有更好的方法来获得总数而不是为每一行添加额外的列,那么我希望相反.谢谢!
是的,有几种方法.
如果你想获得返回PHP的行数,那么,在MySQL应用其limit子句之后,我建议只需调用php函数mysql_num_rows(http://www.php.net/manual/en/function.mysql-num- rows.php)做完mysql_query电话后.
如果你想获得在没有LIMIT子句的情况下返回的行数,我建议分2步执行:首先,执行原始查询的略微修改版本,然后,在此之后立即调用MySQL的FOUND_ROWS函数.(参见http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_found-rows)
它看起来像这样:
$result = mysql_query('SELECT SQL_CALC_FOUND_ROWS * FROM posts LIMIT 0, 5');
//do stuff with the result, but don't do any other queries
//get the total number of rows (disregarding the LIMIT clause)
$result = mysql_query('SELECT FOUND_ROWS()');
Run Code Online (Sandbox Code Playgroud)
该SQL_CALC_FOUND_ROWS修饰符告诉MySQL来跟踪行总数的应用之前LIMIT条款,并FOUND_ROWS()返回该号码.牢记两件事:
mysql_query调用都应该在同一个连接上执行mysql_query哦,最后注意事项:使用时LIMIT,您通常希望以特定方式对结果进行排序.通常人们LIMIT用于分页.如果不对行进行排序,则顺序是不确定的,后续查询可能会返回先前语句已返回的行,即使LIMIT偏移量不同也是如此.您可以使用ORDER BY子句显式地对结果进行排序.(http://dev.mysql.com/doc/refman/5.5/en/select.html)
我不确定你在想什么总数:当前选择的总数或整个表中所有行的数量.这将返回整个表中所有行的数量,当然每行中的值相同:
mysql_query("SELECT *, (select COUNT(*) from posts) AS total FROM posts LIMIT 0, 5");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8218 次 |
| 最近记录: |