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)
接受的答案似乎是错误的.因为它建议在使用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语句可能包括一个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
使用此查询
$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返回的行数
| 归档时间: |
|
| 查看次数: |
26315 次 |
| 最近记录: |