Php 在mysql中选择find_ROWS()返回1
选择Find_ROWS()not working或返回1我不知道哪里出错Php 在mysql中选择find_ROWS()返回1,php,mysql,sql,Php,Mysql,Sql,选择Find_ROWS()not working或返回1我不知道哪里出错 $qry ="SELECT SQL_CALC_FOUND_ROWS DISTINCT user_id, login_date FROM login_members WHERE (login_date BETWEEN '2012-02-13 00:00:00' AND '2013-02-13 23:59:59') LIMIT 0, 10"; $rs = mysql_query($qry); $total_records
$qry ="SELECT SQL_CALC_FOUND_ROWS DISTINCT user_id, login_date
FROM login_members
WHERE (login_date BETWEEN '2012-02-13 00:00:00' AND '2013-02-13 23:59:59')
LIMIT 0, 10";
$rs = mysql_query($qry);
$total_records = mysql_result(mysql_query("SELECT FOUND_ROWS()"),0,0);
使用此查询
$qry ="SELECT DISTINCT user_id, login_date
FROM login_members
WHERE (login_date BETWEEN '2012-02-13 00:00:00' AND '2013-02-13 23:59:59')
LIMIT 0, 10";
如果前面的选择包含SQL\u CALC\u FOUND\u行,但前面的选择不包含SQL\u CALC\u FOUND\u行,则FOUND\u ROWS()返回此前面的选择返回的行数一条
SELECT
语句可能包含一个LIMIT
子句来限制服务器返回给客户端的行数。在某些情况下,需要知道该语句在没有限制的情况下返回了多少行,但不需要再次运行该语句。要获取此行计数,请在SELECT
语句中包含SQL\u CALC\u FOUND\u ROWS
选项,然后调用FOUND\u ROWS()
:
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
-> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();
第二个SELECT
返回一个数字,指示如果没有LIMIT
子句,第一个SELECT
将返回多少行
应该是:
$qry ="SELECT DISTINCT user_id, login_date FROM login_members
WHERE (login_date BETWEEN '2012-02-13 00:00:00' AND '2013-02-13 23:59:59')
LIMIT 0, 10";
$rs = mysql_query($qry);
$total_records = mysql_result(mysql_query("SELECT FOUND_ROWS()"),0,0);
echo $total_records // display total record count
无需使用
SQL\u CALC\u FOUND\u ROWS
SQL\u CALC\u FOUND\u ROWS
和FOUND\u ROWS()
在需要限制查询返回的行数的情况下非常有用,但也可以在不再次运行查询的情况下确定完整结果集中的行数。例如,Web脚本显示分页显示,其中包含指向显示搜索结果其他部分的页面的链接。使用FOUND\u ROWS()
可以确定结果其余部分还需要多少其他页面
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
-> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();
第二个SELECT
返回一个数字,指示第一个SELECT
如果没有LIMIT
子句编写,则会返回。
在最近一次成功的查询中没有SQL\u CALC\u FOUND\u ROWS
选项的情况下
SELECT
语句,FOUND\u ROWS()
返回结果集中的行数
由该声明返回。如果语句包含LIMIT
子句,FOUND\u ROWS()
返回达到限制的行数。例如,FOUND\u ROWS()
返回10
如果语句包含限制10
或限制50,10
,则分别为60
$qry ="SELECT SQL_CAL_FOUND_ROWS *
FROM login_members
WHERE (login_date BETWEEN '2012-02-13 00:00:00' AND '2013-02-13 23:
59:59')
LIMIT 0, 10";
$rs = mysql_query($qry);
$total_records = mysql_query("SELECT FOUND_ROWS() as `found_rows`;");
echo $total_records // display total record count
对于总记录,请使用简单的:
$total_records = array_shift(mysql_fetch_row(mysql_query('SELECT FOUND_ROWS()')));
公认的答案似乎是错误的。因为它建议在带有限制的查询之后使用find_rows() 回答:问题是关于返回1,在某些情况下,返回0是因为找到了_行() 它发生在您第一次执行select语句后执行其他查询时。 特别是当您使用IDE或某些客户端运行查询时,一些附加的“准备”查询会在查询前后执行 和found_rows()将返回服务器上上次运行的查询返回的结果数。在这种情况下,这不是我们所期望的 因此返回1或0错误 验证: 您可以通过在服务器上启用常规日志记录并执行查询来验证这一点。 您将看到在“第一个查询和找到的行查询”之间执行的两个附加查询 修复 存储过程,或旧版本计数(*) 就性能而言,几乎没有什么区别 附加的 如果您的目标是查找返回的总行数,那么就可以了。 而且SQL\u CALC\u FOUND\u行的使用变得无关紧要 这里有一条一般规则,找到的行不需要限制,SQL\u CALC\u found\u行也不需要限制。 但其中三个可以一起使用,得到非常有用的结果 我喜欢跑步
SELECT SQL_CALC_FOUND_ROWS * from some_table_name LIMIT 0,10;
SELECT FOUND_ROWS();
我们将获得运行查询时返回的行数
从sometable_name中选择*;
ie:没有限制
话虽如此
SELECT * from some_table_name LIMIT 0, 10;
SELECT FOUND_ROWS();
将给我们总的结果数,限制的cos将您必须将mysql.trace_mode设置为off 在每个php页面中都使用此选项
ini_set("mysql.trace_mode", "0");
或者您可以在.htaccess文件上设置此选项
php_value mysql.trace_mode "0"
在这里:
你想知道总记录吗?先生,这不是我的解决方案。请建议最好的方法是忘记旧的/新的Etchies Devang Rathod,而是使用select Find Row。如果这篇文章有助于你,请将其标记为帮助其他观众的答案。我在此表示感谢。它解决了我的关键问题。在每次查询之前,我都在运行SELECT*FROM INFORMATION\u SCHEMA.PROCESSLIST
,以检测基本查询是否太慢。。它将记录在它之前运行的查询。但是,这会杀死SQL\u CALC\u FOUND\u行
。再次感谢,一开始似乎是不可能调试的!
<?php
ini_set("mysql.trace_mode", "0");
$qry ="SELECT SQL_CALC_FOUND_ROWS DISTINCT user_id, login_date
FROM login_members
WHERE (login_date BETWEEN '2012-02-13 00:00:00' AND '2013-02-13 23:59:59')
LIMIT 0, 10";
$rs = mysql_query($qry);
$total_records = mysql_result(mysql_query("SELECT FOUND_ROWS()"),0,0);
echo $total_records;
?>