Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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中选择find_ROWS()返回1_Php_Mysql_Sql - Fatal编程技术网

Php 在mysql中选择find_ROWS()返回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

选择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 = 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;
?>