1

我试图在我的查询中使用 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...
}
4

2 回答 2

2

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

您可以通过在查询中使用 GROUP BY 子句来解决它。

于 2013-05-11T11:35:32.710 回答
1

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

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

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

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

于 2013-05-11T09:42:32.897 回答