私は無制限の行を持つsqlから結果を取得したい、私は行の総数を知る必要があるので、limit
私のSQLステートメントで使用したくない。しかし、私はちょうどecho
、例えば行30-60にしたいです。SQL結果からphpで行30をエコーしますか?
私はPHPを使用しています。
私は無制限の行を持つsqlから結果を取得したい、私は行の総数を知る必要があるので、limit
私のSQLステートメントで使用したくない。しかし、私はちょうどecho
、例えば行30-60にしたいです。SQL結果からphpで行30をエコーしますか?
私はPHPを使用しています。
http://php.net/manual/en/function.mysql-data-seek.php
。
mysql_fetch_assoc()
のような次のMySQLフェッチ関数の呼び出しは、その行を返します。
mysql_data_seek($res, 30);
for ($i = 0; $i < 30; ++$i) {
$row = mysql_fetch_assoc($res);
var_dump($row);
}
まず、このステートメントを実行します。
SELECT SQL_CALC_FOUND_ROWS
*
FROM mytable
ORDER BY
mycol
LIMIT 30, 30
、行をフェッチし、配列に保存します。
その直後、このステートメントを実行します。
SELECT FOUND_ROWS()
、あなたのことが、前の文なしLIMIT
句によって返される行の合計数が表示されます。
$query=mysql_query("SELECT....");
$array=array();
while($row=mysql_fetch_row($query)){
$array[]=$row;
}
これですべての行を含む$配列配列が作成されました。あなたは30と60の使用この間の行のみを印刷する場合:
SELECT SQL_CALC_FOUND_ROWS * FROM accounts ORDER BY accountID LIMIT 30
をして、行数を見つけるために、このselect文を実行します:私はQuassnoiを信じる
for($i=30;$i<60;$i++) echo $array[$i][0];
この意味
をselect found_rows();
*を使用してクエリを実行する必要はありません。これは、パフォーマンスを低下させるためです。必要な列の名前を使用します。私はこれが最も効率的なので、これが最良の方法だと思います。カウントと30行だけが必要な場合は、テーブル全体を返す必要はありません。指定された行番号を指すように指定された結果識別子に関連付けられているMySQLの結果の内部行ポインタを移動mysql_data_seek()
mysql_data_seekが作業をしました。どうもありがとう! :)もう一度幸せ。 – Johan
これは必ずしも良い考えではありません。これは、必要以上に多くのデータをフェッチする可能性があることを意味します.2つのクエリ(1つは制限されたデータ、1つはカウント)を実行するより効率が悪くなります。 –
また、 -loopは利用可能なデータを超えて継続します。 –