0

私はmysqlでphpを使用しています。

私は365のテーブルを含む大規模なデータベースを持っており、mysql毎日1つのテーブルが含まれ、1つのテーブルに各クライアントの数千のレコードが含まれています。私の問題は、複数のクライアントのレポートを生成しようとすると、何も表示されないことです。

一方、mysqlログを確認すると、バックエンドで実行されているクエリが表示されます。バックエンドでクエリが完了してもブラウザに何も表示されない場合、ブラウザにはプロセスが実行されていることが表示されます。

私の現在のコードは次のようになります。

//$ClientList Contains 100 clientIds
//$TableList contains 30 table list
$TotalCount = count($ClientList);
$CountTables = count($TableList);
for($i=0; $i<$TotalCount; $i++) {
    for($j=0; $j<$CountTables; $j++) {
        $sql = "INSERT INTO TABLEA SELECT * FROM ".$TableList[$j]." WHERE clientid = '".$ClientList[$i]."'";
        $rs = mysql_query($sql);
    }
}
for($i=0; $i<$TotalCount; $i++) {
    $sql = "SELECT * FROM TABLEA";
    //STORE IN ARRAY
    $rs = mysql_query($sql);
    while($ds=mysql_fetch_assoc($rs)) {
        $aRRAY[$i] = $ds;
    }
}

for($i=0; $i<count($aRRAY); $i++) {
}

しかし、ブラウザには何も来ていません。私もsettimeout0に追加しました。セッション時間が長くなりましたが、結果はありません。この問題の解決策はありますか?

4

1 に答える 1

0

PHP 配列に 100 万件のレコードを保存しないでください。

//$ClientList Contains 100 clientIds
//$TableList contains 30 table list
$TotalCount = count($ClientList);
$CountTables = count($TableList);
for($i=0; $i<$TotalCount; $i++) {
for($j=0; $j<$CountTables; $j++) {
$sql = "INSERT INTO TABLEA SELECT * FROM ".$TableList[$j]." WHERE clientid = '".$ClientList[$i]."'";
$rs = mysql_query($sql);
}
}

//OUTPUT
$sql = "SELECT * FROM TABLEA";
//
$rs = mysql_query($sql);
while($ds=mysql_fetch_assoc($rs)) {
    my_output($ds);
}

また、データベースがすべてのレコードを TABLEA に格納することを信頼している場合、それらを別のテーブルに格納する必要はありません。

//$ClientList Contains 100 clientIds
//$TableList contains 30 table list
$TotalCount = count($ClientList);
$CountTables = count($TableList);
for($i=0; $i<$TotalCount; $i++) {
    for($j=0; $j<$CountTables; $j++) {
        //OUTPUT
        $sql = "SELECT * FROM ".$TableList[$j]." WHERE clientid = '".$ClientList[$i]."'";
        //
        $rs = mysql_query($sql);
        while($ds=mysql_fetch_assoc($rs)) {
            my_output($ds);
        }
    }
}
于 2013-02-15T11:20:15.423 に答える