2009-08-25 10 views
1

私は無制限の行を持つsqlから結果を取得したい、私は行の総数を知る必要があるので、limit私のSQLステートメントで使用したくない。しかし、私はちょうどecho、例えば行30-60にしたいです。SQL結果からphpで行30をエコーし​​ますか?

私はPHPを使用しています。

答えて

1

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);  
} 
+0

mysql_data_seekが作業をしました。どうもありがとう! :)もう一度幸せ。 – Johan

+1

これは必ずしも良い考えではありません。これは、必要以上に多くのデータをフェッチする可能性があることを意味します.2つのクエリ(1つは制限されたデータ、1つはカウント)を実行するより効率が悪くなります。 –

+0

また、 -loopは利用可能なデータを超えて継続します。 –

4

まず、このステートメントを実行します。

SELECT SQL_CALC_FOUND_ROWS 
     * 
FROM mytable 
ORDER BY 
     mycol 
LIMIT 30, 30 

、行をフェッチし、配列に保存します。

その直後、このステートメントを実行します。

SELECT FOUND_ROWS() 

、あなたのことが、前の文なしLIMIT句によって返される行の合計数が表示されます。

+0

どのように私はPHPで合計行をエコーすることができますか? – Johan

+1

これは2つのステートメントです。最初のものでは行を取得し(配列やその他の場所に保存する)、2番目の行では行の総数を取得します。 – Quassnoi

0
$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]; 
0

この意味

select found_rows(); 

*を使用してクエリを実行する必要はありません。これは、パフォーマンスを低下させるためです。必要な列の名前を使用します。私はこれが最も効率的なので、これが最良の方法だと思います。カウントと30行だけが必要な場合は、テーブル全体を返す必要はありません。指定された行番号を指すように指定された結果識別子に関連付けられているMySQLの結果の内部行ポインタを移動mysql_data_seek()

関連する問題