私はインターネットとこのフォーラムを検索してきましたが、メモリ使用量の問題に遭遇することなく、特に高速に実行するための良い方法をまだ見つけられません。ここに私の仕事があります:
従来のmysqlで行ったこと:
3 つのテーブルがあります。たとえば、table1、table2、および table3 です。table1 に 300.000 行があるとします (たとえば、購入アイテムです)。table2 が製品のリストで、10.000 行あるとします。テーブル 3 が10.000 行のサービス リスト
今、私がする必要があるのは、ループ内のすべての購入をリストするレポートを生成することです。これは、購入アイテムが製品またはサービスのためのものであるかどうかをチェックし、それが製品である場合、取得することによって製品の名前を出力しますtable2 の対応する名前の列。それがサービスだったら同じことが起こるだろう...
1) マニュアルとフォーラムでは、すべての行を読み終えるまで PDO で別のクエリを実行できないと書かれています...これは、製品/サービスの名前を取得するために別のクエリを実行する必要があるためです。(mysql では、多くの結果リソースを処理し、それらの間で mysql_result を反復するだけなので、これは非常に単純です)
2) 一部の人々は、fetchall または fetch を使用するとメモリ使用量が爆発的に増加し、このクエリを実行できなくなると言いました....私はすでにすべての結果 (300K) を含む配列を取得しようとしましたが、比喩的にメモリを爆発させます私のサーバーの使用...
それでみんな、私を助けてくれますか?サーバーを Windows azure に移動しようとしていますが、pdo os sqlsrv しか許可されていません.....
一部の人々が尋ねたように、ここに私の理論的なコードがあります:
// connect to mysql database
$sql = @mysql_connect("{server}","{login}","{password}");
@mysql_select_db("{database}");
// query:
$result = mysql_query("SELECT * FROM table1 ORDER BY purchase_date ASC");
for($i=0;$i<$num;$i++){
if(mysql_result($result,$i,"purchase_type")==1){
$result1 = mysql_query("SELECT product_name FROM table2 WHERE id='".mysql_result($result,$i,"purchase_type_id")."'");
$name = mysql_result($result1,0,"product_name");
}else if(mysql_result($result,$i,"purchase_type")==2){
$result1 = mysql_query("SELECT service_name FROM table3 WHERE id='".mysql_result($result,$i,"purchase_type_id")."'");
$name = mysql_result($result1,0,"service_name");
}else{
$name = '{error}';
}
echo(($i+1)". ".$name." <br/>");
}
PS: これは単なるサンプル コードです....実際のコードはそれよりもはるかに長く、より複雑です....しかし、ここで理論を解くことができれば、残りを理解することができます... :)
PS2:誰かが尋ねる前に.... table2 と table3 は異なる列を持っています....
ありがとう、