php–MySql选择行数为额外列?

php–MySql选择行数为额外列?,第1张

概述我需要一个MySql语句来选择所有行,以及总行数.我在用mysql_query('SELECT * FROM posts LIMIT 0, 5'); ...试图添加计数:mysql_query('SELECT *, COUNT(*) AS total FROM posts LIMIT 0, 5'); ...但只返回一行.此外,如果有更好的方法来获得总数而不是

我需要一个MySql语句来选择所有行,以及总行数.

我在用

MysqL_query("SELECT * FROM posts liMIT 0,5");

…试图添加计数:

MysqL_query("SELECT *,COUNT(*) AS total FROM posts liMIT 0,5");

…但只返回一行.

此外,如果有更好的方法来获得总数而不是为每一行添加额外的列,那么我希望相反.谢谢!

最佳答案

I need a MysqL statement that will select all the rows,as well as how many total rows there are.

从字面上看,这是不可能的. SQL查询的结果是(虚拟)表;该结果表中每行中的列提供仅与该行关联的值,并且这些行实际上彼此独立.

有很多方法可以获取整个结果的行数,但它可以在两个语句中完成,也可以在概念上与您拥有的查询不同. (以下解决方案)

您原始问题中的一个方面可以通过多种方式进行解释:

as well as how many total rows there are

这可能意味着:

>计算结果中返回的每一行.
>如果不是liMIT子句(在这种情况下将结果截断为5行),则计算将返回的每一行

(我会在下面给出答案)

but that only returns a single row. I’m guessing it’s because COUNT(*) is going to be the same for each row,and for some reason,MysqL is only returning rows with unique values for it? I have no clue.

COUNT是一个聚合函数.通过使用聚合函数,您要求数据库将行组合在一起并将其某些方面投影到一行中.令人困惑的是,MysqL也可以在同一个SELECT列表中混合使用非聚合和聚合表达式.大多数其他数据库不允许这样做,并为此提供错误,但唉MysqL没有.

但COUNT(*)仍将所有行聚合为一行,代表整个行组.

Also,if there is a better way to get the total than to add an extra column to each row,then I would like that instead. Thank you!

是的,有几种方法.

如果你想获得返回PHP的行数,那么,在MysqL应用其limit子句之后,我建议在执行MysqL_query调用之后简单地调用PHP函数MysqL_num_rows(http://www.php.net/manual/en/function.mysql-num-rows.php).

如果你想获得在没有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()');

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) 总结

以上是内存溢出为你收集整理的php – MySql选择行数为额外列?全部内容,希望文章能够帮你解决php – MySql选择行数为额外列?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1168961.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存