mysql FOUND_ROWS()返回错误的值

时间:2013-05-10 07:30:44

标签: php mysql sql pdo php-5.3

我正在尝试在查询中使用FOUND_ROWS(),但函数有时会返回错误的值。

SELECT SQL_CALC_FOUND_ROWS adminslog.*, admins.fullName FROM adminslog 
JOIN admins ON admins.id=adminslog.userId ORDER BY date DESC LIMIT 0,12

在这个查询中,我得到了一些正确的值,但在其他情况下,限制的值是错误的。

LIMIT 0,12        164rows        right
LIMIT 12,12       164rows        right
LIMIT 36,12       164rows        right
LIMIT 48,12       164rows        right
LIMIT 50,12       60rows         wrong
LIMIT 62,12       60rows         wrong

这是我的班级构造:

class list_table
{
public $number,$page_number,$all_rec,$table_rows,$query_str,$query,$fetch,$table,$db,$fields,$i=0,$page_n,$onclick;

function __construct($query_str,$fields,$page_n,$onclick,$page_number,$number,$db)
{
    $this->fields = $fields; $this->page_number = (((int)$page_number<1)?1:(int)$page_number); $this->number = (int)$number; $this->db = $db;
    $this->i = $this->page_number*$this->number-$this->number; $this->page_n = $page_n; $this->onclick = $onclick;
    $this->query_str = substr(trim($query_str),0,7)."SQL_CALC_FOUND_ROWS ".substr(trim($query_str),7)." LIMIT ".(($this->page_number*$this->number)-$this->number).",".$this->number;

    $this->query = $this->db->query($this->query_str);
    $this->table_rows = $this->db->query("SELECT FOUND_ROWS()")->fetchColumn();

    $this->all_rec = $this->query->rowCount();
    $this->fetch = $this->query->fetch();

    //$this->table_rows = $this->table_rows->fetch();
    //$this->table_rows = $this->table_rows['cnt'];
    print $this->table_rows;
}

other functions...
}

2 个答案:

答案 0 :(得分:2)

mysql错误可能导致此问题,具体取决于您使用的版本: http://bugs.mysql.com/bug.php?id=1468

您可以在查询中使用GROUP BY子句来解决此问题。

答案 1 :(得分:1)

问题:您认为每次查询时您的第一个FOUND_ROWS()都是正确的吗?

检查一下,如果确实如此,您只能在第一个查询中运行此代码并将其保存到会话中。

if($this->page_number==1) $_SESSION['cr'] = $this->table_rows = $this->db->query("SELECT FOUND_ROWS()")->fetchColumn();

这样你就不必每次都检查行数。