0

大量のデータを含むテーブルがあるので、それを取得して一度に 1 ページずつ表示します (私の要求は長いので、テーブル全体で実行する方法はありません)。

しかし、結果をページ分割したいので、テーブル内の要素の総数を知る必要があります。

同じリクエストでa を実行するCOUNT(*)と、選択した要素の数 (私の場合は 10) を取得します。

2 番目のリクエストでテーブルに対して を実行するCOUNT(*)と、メイン クエリに where、join、および having 句があるため、結果が間違っている可能性があります。

最もクリーンな方法は次のとおりです。

  • データを取得する
  • この特定のリクエストのテーブル内の要素の最大数を知る

1 つの解決策は、 Mysql 関数 FOUND_ROWSを使用しているようです。

mysql_query は一度に 1 つのクエリを実行するため、これを試しました: (ここで取得)

$query = 'SELECT SQL_CALC_FOUND_ROWS * FROM Users';
$result = mysql_query($query);
// fetching the results ...

$query = 'SELECT FOUND_ROWS()';
$ result = mysql_query($query);

// debug
while ($row = mysql_fetch_row($result)) {
    print_r($row);
}

そして、結果が0の配列を取得しました:

Array ( [0] => 0 )

私のクエリは結果を返しますが。

私のアプローチの何が問題になっていますか? より良い解決策はありますか?

4

2 に答える 2

0

の場合に設定mysql.trace_modeします。OffOn

ini_set('mysql.trace_mode','Off');my.cnfを編集できない場合は、ホスト構成によっても機能する可能性があります

上記で投稿したコードが機能しない場合は、LIMITを指定せずにクエリを再度実行し、そのようにカウントする必要があります。

于 2012-10-09T14:49:53.040 に答える
0

上記のコードは正常に動作します。接続を正しく開いていませんでした。

出力は次のとおりです。

Array ( [0] => 10976 )

それを行う別の方法、特にmysqlに依存しない方法にまだ興味があります。

于 2012-10-09T14:57:31.543 に答える