SELECT FOUND_ROWS()在mysql中返回1

okc*_*sed 5 php mysql sql

SELECT FOUND_ROWS()不工作或返回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);
Run Code Online (Sandbox Code Playgroud)

Mor*_*ews 9

接受的答案似乎是错误的.因为它建议在使用LIMIT查询后使用found_rows().

答案:问题是关于RETURN 1,在某些情况下是由于found_rows();

在您的第一个选择语句之后执行某些其他查询时会发生这种情况.特别是当您使用IDE或某个客户端来运行查询时,会在查询之前和之后执行一些额外的"准备"查询.

和FOUND_ROWS()将返回在服务器上运行的最后一个查询返回结果的NUMER.在这种情况下,这不是我们期待的那个.

因此返回1或0错误.

验证: 您可以通过启用服务器上的常规日志记录并执行查询来验证这一点.你会看到情侣"第一个查询和发现的行查询"之间exectued产生额外的查询.

FIX 存储过程,或旧的COUNT(*).

表现明智,几乎没有任何区别.

额外

如果你的对象要找到返回的总行数,那就没关系了.并且SQL_CALC_FOUND_ROWS的使用变得无关紧要.

这是一般规则,找到的行不需要LIMIT,也不需要SQL_CALC_FOUND_ROWS.但是它们中的三个可以一起使用以产生非常有用的结果.

即在运行类似的东西.

SELECT  SQL_CALC_FOUND_ROWS * from some_table_name LIMIT 0,10; 
SELECT FOUND_ROWS();
Run Code Online (Sandbox Code Playgroud)

如果我们从sometable_name运行SELECT*,我们将获得查询返回的行数; 即:没有LIMIT.

话说回来,

SELECT * from some_table_name LIMIT 0, 10; 
SELECT FOUND_ROWS(); 
Run Code Online (Sandbox Code Playgroud)

会给我们结果的总数,其中限制的cos将<= 10.并没有任何实际目的,但这不是一个错误.

  • 在此我谨表示感谢。它解决了我的关键问题。我在每个查询之前运行“SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST”,以检测基本查询是否太慢。它会记录之前运行的查询。然而,这会杀死“SQL_CALC_FOUND_ROWS”。再次感谢,一开始调试似乎是不可能的事情! (2认同)

Var*_*run 6

一个SELECT语句可能包括一个LIMIT条款,限制服务器返回给客户端的行数.在某些情况下,需要知道语句在没有LIMIT的情况下返回了多少行,但是没有再次运行语句.要获取此行计数,请SQL_CALC_FOUND_ROWS在SELECT语句中包含一个选项,然后在以后调用FOUND_ROWS():

mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
    -> WHERE id > 100 LIMIT 10;

mysql> SELECT FOUND_ROWS();
Run Code Online (Sandbox Code Playgroud)

第二个SELECT返回一个数字,表示如果SELECT没有该LIMIT子句,第一个将返回的行数.

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows


Yog*_*har 5

使用此查询

$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";
Run Code Online (Sandbox Code Playgroud)

如果前面的SELECT包含SQL_CALC_FOUND_ROWS,但是如果前面的SELECT不包含SQL_CALC_FOUND_ROWS,则FOUND_ROWS()返回此前面的SELECT返回的行数