这是我的脚本,花了太长时间,我怎样才能改善执行时间?
查看所有COD:HERE!
$count_nr_attributes = count($nume);
$csv[0] = $csv_array_attributes[0];
for ($i=0; $i < $csv_array_attributes; $i++) {
if ($i > 0){
$final = "";
for ($j=1; $j < $count_nr_attributes; $j++) {
echo "select val_attr from attributes where id_produs = '$csv_array_attributes[$i]' and nume_attr = '$nume[$j]'";echo "<br>";
$select = mysql_query("select val_attr from attributes where id_produs = '$csv_array_attributes[$i]' and nume_attr = '$nume[$j]'");
$count = mysql_num_rows($select);
if ($count == 1){
$row = mysql_fetch_array($select);
$final .= $row['val_attr']."%%";
}else{
$final .= "no%%";
}
}
echo "<hr>";
}
$csv[$i] = $csv_array_attributes[$i]."%%".$final;
}
//create CSV
$file = fopen("attributes.csv","w+");
foreach ($csv as $line){
fputcsv($file,explode('%%',$line),"^","`");
}
变量$count_nr_attributes
包含超过2500个值,而$ csv_array_attributes包含超过2500个值。实际上我有两个for循环,执行时间太长。我怎么能改善这个? THX
并且查询结果总是返回一个值;
答案 0 :(得分:2)
每次执行SQL查询时,无论返回多少结果,都需要一些时间。
您可以做的最好的事情是减少脚本所需的时间,将查询置于循环之外,一次获取所有结果,然后使用循环处理它。
答案 1 :(得分:1)
首先:不要使用mysql_ *。无论如何,尝试用尽可能少的查询来重做这个。我现在没有时间分析所有的意图,但尝试类似的事情:
$count_nr_attributes = count($nume);
$csv[0] = $csv_array_attributes[0];
$query = "
SELECT id_produs, nume_attr, val_attr FROM attributes WHERE
id_produs IN (".implode(",", $csv_array_attributes).") AND nume_attr BETWEEN 0 AND {$count_nr_attributes}
ORDER BY id_produs";
$res = mysql_query($query);
$lastProduct = -1;
while($row = mysql_fetch_array($res)) {
//do whatever you want
//just check if id_produs is different than the previous one to emulate
//$csv[$i] = $csv_array_attributes[$i]."%%".$final;
}
答案 2 :(得分:0)
使用带有键的关联数组作为id_produs及其内部循环之后的值再次使用关联数组来获取与第一个关联数组相关的所有记录,希望它会减少一点时间。 thankx