2013-02-13 55 views
3

SELECT FOUND_ROWS()不工作或返回1,我不知道我哪里错SELECT FOUND_ROWS()在MySQL返回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); 
+0

你想知道总记录? – 2013-02-13 06:12:09

+0

先生这不是我的解决方案PLZ建议最好的一个忘了旧/新等 – okconfused 2013-02-13 06:12:42

+0

是的Devang Rathod,但通过使用选择找到的行 – okconfused 2013-02-13 06:13:24

回答

3

使用此查询

$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"; 

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

4

A SELECT statement may inc lude a LIMIT子句来限制服务器返回给客户端的行数。在某些情况下,需要知道语句在没有LIMIT的情况下会返回多少行,但不需要再次运行语句。要获得此行计数,包括在SELECT语句SQL_CALC_FOUND_ROWS选项,然后调用FOUND_ROWS()后:

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

mysql> SELECT FOUND_ROWS(); 

第二SELECT返回一个数字,表示有多少第一SELECT将返回行如果当时未经书面LIMIT条款。

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

+0

thankx先生。 Varun我得到了我的答案 – okconfused 2013-02-13 06:25:39

+0

如果这篇文章帮助你请标记为帮助其他观众的答案。 – Varun 2013-02-13 10:54:56

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"; 

$rs = mysql_query($qry); 

$total_records = mysql_result(mysql_query("SELECT FOUND_ROWS()"),0,0); 

echo $total_records // display total record count 

没有必要使用SQL_CALC_FOUND_ROWS

0

SQL_CALC_FOUND_ROWSFOUND_ROWS()可以在以下情况下非常有用,当你希望限制的行数一个查询返回,但还可以确定完整结果集中的行数,而无需再次运行查询。一个例子是一个Web脚本,它提供了一个分页显示,其中包含指向显示搜索结果其他部分的页面的链接。使用FOUND_ROWS()可以确定剩余结果需要多少个其他页面。

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

第二SELECT返回一个数字,表示第一SELECT 多少行将会返回了它没有LIMIT条款被写入。 如果最近成功的 SELECT语句中缺少SQL_CALC_FOUND_ROWS选项,FOUND_ROWS()将返回该语句返回的结果集 中的行数。如果声明包含LIMIT子句,FOUND_ROWS() 返回达到限制的行数。例如,如果语句包括LIMIT 10LIMIT 50, 10,则FOUND_ROWS()分别返回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 
0

对于总记录使用简单:

$total_records = array_shift(mysql_fetch_row(mysql_query('SELECT FOUND_ROWS()'))); 
3

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

答案:问题是关于RETURN 1,在某些情况下,作为found_rows()的结果0的问题;

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

和found_rows()将返回在服务器上运行的LAST查询返回的结果的数量。在这种情况下,这不是我们所期望的。

因此返回1或0错误。

验证: 您可以通过在服务器上启用常规日志记录并执行查询来验证此情况。 您会看到在第一个查询和找到的行查询之间执行的一对附加查询。

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(); 

我们得到这个会被询问时,我们从sometable_name运行 SELECT *返回的行数; ie:没有限制。

话说回来,

SELECT * from some_table_name LIMIT 0, 10; 
SELECT FOUND_ROWS(); 

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

0

您必须将mysql.trace_mode设置为off。

使用这是在每个php页面。

ini_set("mysql.trace_mode", "0"); 

或者你可以把这个在.htaccess文件

php_value mysql.trace_mode "0" 

这里:

<?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; 
?> 
相关问题