Как мне сократить время выполнения моего скрипта на PHP?

это мой сценарий, он занимает слишком много времени, как я могу улучшить время выполнения?

СМОТРЕТЬ ВСЕ ХПК: ВОТ !

$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, и время выполнения занимает слишком много времени. Как я могу улучшить это? Спасибо

и результат запроса всегда возвращает мне одно значение;

0

Решение

Каждый раз, когда вы выполняете SQL-запрос, независимо от того, сколько результатов он возвращает, это занимает некоторое время.

Лучшее, что вы можете сделать, чтобы уменьшить время, которое занимает ваш скрипт, — это поместить запрос вне циклов, получить все результаты сразу и обработать их потом с помощью вашего цикла.

2

Другие решения

Прежде всего: не используйте 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;
}
1

используйте ассоциативный массив с ключом в качестве id_produs и его значение после этого внутри цикла. снова используйте ассоциативный массив, чтобы извлечь все записи, относящиеся к первому ассоциативному массиву, надеясь, что он немного уменьшится. Thankx

0
По вопросам рекламы [email protected]