0

我正在使用 php 和 mysql。

我有一个mysql包含 365 个表的大型数据库,每天都包含一个表,并且在单个表中包含每个客户的数千条记录。我的问题是,当我要为多个客户生成报告时,它没有显示任何内容。

另一方面,当我检查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 数组中存储一百万条记录:

//$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 回答