0

私は12000の製品のデータベースを持っています。1ページに約3000個の商品を表示するクエリがあり、表示に時間がかかります。ただし、データは、クエリ全体またはループが終了した後に表示されます。引っ張られたときに各結果を表示する方法はありますか?以下は私のコードです。

$result = mysql_query("SELECT title, model, description FROM products WHERE price > 500");
while($row = mysql_fetch_array($result)):
...
endwhile;

どんな助けでも大歓迎です。ありがとう

4

3 に答える 3

2

これは、dbからの遅延読み込みと呼ばれます。

この記事またはこのチュートリアルをご覧ください

合成を行う必要がある場合、基本的にはLIMIT、dbから取得する必要がある特定の量のレコードに対するクエリです。何らかの条件(ページネーションの変更、下へのスクロールなど)に達すると、他のレコードなどを取得するajax呼び出しを起動します。

于 2013-03-27T14:22:25.740 に答える
1

mysql拡張機能は廃止され、mysqliまたはpdoに切り替える方が適切です。しかし、これはapi / moduleに関係なく同じ問題なので、今はmysql_ *を使い続けましょう。
呼び出さmysql_query(...)れると、関数は、完全な結果セットがMySQLサーバーからphpプロセスのメモリに転送された後にのみ返されます。代わりに
使用してください:mysql_unbuffered_query(...)

<?php
$result = mysql_unbuffered_query("SELECT title, model, description FROM products WHERE price > 500");
while($row = mysql_fetch_array($result)):
...
  // output
  // maybe flush() or ob_flush() here...
endwhile;

違いはで説明されています

また、潜在的な出力バッファーを念頭に置く必要があります:http: //docs.php.net/flushおよびhttp://docs.php.net/ob_flush

また、htmlクライアント/ブラウザの場合、すべてのデータが送信される前にレンダリングできる構造に部分的なデータを配置する必要があります。したがって、たとえば、固定されていないテーブルは最適ではない可能性があります。例:https ://en.wikipedia.org/wiki/Incremental_renderingを参照してください

于 2013-03-27T14:25:02.630 に答える
0

そのような効果を達成するための多くの変数があります。

まず第一に、php設定で出力バッファリングを使用できるようにする必要があります(output_bufferingパラメーターとおそらくimplicit_flushを見てください)。その後、おそらくflush()および/またはob_flush()を使用する必要があります

考慮すべきもう1つのことは、ブラウザ自体が常に出力バッファリングの使用を許可しているわけではないということです。これは「問題」として知られています。

クエリ自体については、おそらくmysql_unbuffered_query(またはより良いMySQLi / PDOと同等のもの)を使用してみてください。

要約すると、私の意見では、そのような効果を達成するための最良の方法は、ajaxデータポーリングを使用することです。

于 2013-03-27T14:28:28.153 に答える