powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Помогите пожалуйста оптимизировать код
14 сообщений из 14, страница 1 из 1
Помогите пожалуйста оптимизировать код
    #39048682
NOOBик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
встретился с одной проблемой, решил обратиться к гуру SQLя или ПХП
Суть такова, есть запрос который находится в середине цикла и из за этого код работает медленно. Помогите пожалуйста оптимизировать код, вынести запрос с цикла. Спасибо.
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
FOR ($GRHM = $Reg_Poch_Day_Hd; $GRHM < $Reg_Fin_Day_Hd; $GRHM++){
		FOR ($SRHV = $Reg_Poch_Day_Hv; $SRHV < $Reg_END; $SRHV += $Reg_Period){
			$gh = $GRHM.$SRHV;
                        foreach ($KabinetsBody as $Kabinets){
					$SRKs = $Kabinets['id_kabs'];
              
	$SQL_List_Broniv = mysql_query ("SELECT
								exp_resid.exp_bron_doc.date_broni,
								exp_resid.exp_bron_doc.id_kabinets,
								exp_resid.exp_bron_doc.Po_time_G,
								exp_resid.exp_bron_doc.Po_time_H,
								exp_resid.exp_bron_doc.id_status_Poslugi
							FROM
								exp_resid.exp_bron_doc
									INNER JOIN exp_klients.info_klients ON exp_klients.info_klients.id_klients = exp_resid.exp_bron_doc.id_klient
									INNER JOIN exp_resid.poslugi ON exp_resid.poslugi.id_poslugi = exp_resid.exp_bron_doc.id_posluga
							WHERE
								exp_resid.exp_bron_doc.id_kabinets = $SRKs AND
								exp_resid.exp_bron_doc.date_broni = $RegDateUnx AND
								exp_bron_doc.Z_time <= $gh AND
								exp_bron_doc.Po_time > $gh
							ORDER BY
								exp_resid.exp_bron_doc.Z_time_G DESC")or die (mysql_error());
	$RegResult = mysql_fetch_assoc($SQL_List_Broniv);
                }
}
...
Рейтинг: 0 / 0
Помогите пожалуйста оптимизировать код
    #39048710
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NOOBик,
в коде я вижу 3 открывающихся скобки и 2 закрывающихся... далее не понятно, что вы делаете дальше с $RegResult. По этому коду он просто перезаписывается последним запросом.
...
Рейтинг: 0 / 0
Помогите пожалуйста оптимизировать код
    #39048742
NOOBик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kunaksergey,

да, может пропустил когда копировал и вставлял )
...
Рейтинг: 0 / 0
Помогите пожалуйста оптимизировать код
    #39048766
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опиши, что должен считать твой запрос, и что в переменных, которые в него подставляются, куда идет результат $RegResult, который как написали выше, тупо затирается. Сколько итераций делается?
Запрос в тройном цикле, я бы на месте мускуля возненавидел разработчика.
...
Рейтинг: 0 / 0
Помогите пожалуйста оптимизировать код
    #39048792
NOOBик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SharuPoNemnogu,

да вот именно, по етому прошу помочь с оптимизацией ))))))

$Reg_Poch_Day_Hd = 7;
Reg_Fin_Day_Hd = 19;
$Reg_Poch_Day_Hv = 0;
$Reg_END = 60;
$Reg_Period = 15;
...
Рейтинг: 0 / 0
Помогите пожалуйста оптимизировать код
    #39048802
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NOOBик,

а с $RegResult что в итоге?
...
Рейтинг: 0 / 0
Помогите пожалуйста оптимизировать код
    #39048849
NOOBик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SharuPoNemnogu,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
echo "<table><tr>";
FOR ($GRHM = $Reg_Poch_Day_Hd; $GRHM < $Reg_Fin_Day_Hd; $GRHM++){
		FOR ($SRHV = $Reg_Poch_Day_Hv; $SRHV < $Reg_END; $SRHV += $Reg_Period){
			$gh = $GRHM.$SRHV;
                        foreach ($KabinetsBody as $Kabinets){
					$SRKs = $Kabinets['id_kabs'];
              
	$SQL_List_Broniv = mysql_query ("SELECT
								exp_resid.exp_bron_doc.date_broni,
								exp_resid.exp_bron_doc.id_kabinets,
                                                                exp_resid.exp_bron_doc.name,
                                                                exp_resid.exp_bron_doc.Z_time_G,
								exp_resid.exp_bron_doc.Z_time_H,
								exp_resid.exp_bron_doc.Po_time_G,
								exp_resid.exp_bron_doc.Po_time_H,
								exp_resid.exp_bron_doc.id_status_Poslugi
							FROM
								exp_resid.exp_bron_doc
									INNER JOIN exp_klients.info_klients ON exp_klients.info_klients.id_klients = exp_resid.exp_bron_doc.id_klient
									INNER JOIN exp_resid.poslugi ON exp_resid.poslugi.id_poslugi = exp_resid.exp_bron_doc.id_posluga
							WHERE
								exp_resid.exp_bron_doc.id_kabinets = $SRKs AND
								exp_resid.exp_bron_doc.date_broni = $RegDateUnx AND
								exp_bron_doc.Z_time <= $gh AND
								exp_bron_doc.Po_time > $gh
							ORDER BY
								exp_resid.exp_bron_doc.Z_time_G DESC")or die (mysql_error());
	$RegResult = mysql_fetch_assoc($SQL_List_Broniv);
                                  if( $SRHV == $Reg_Poch_Day_Hv ){
                                      echo "<td> $GRHM </td>";
                                  }else{
                                       echo "<td> $SRHV </td>";
                                  }
                                        if( $gh >= $RegResult['Z_time_G']. $RegResult['Z_time_H'] and $gh < $RegResult['Po_time_G']. $RegResult['Po_time_H'] ){
                                                     echo "<td> ". $RegResult['name'] ."</td>";
                                        }else{
                                                       echo "<td> </td>";
                                        }
                          }
                }
}


Вот, както так
...
Рейтинг: 0 / 0
Помогите пожалуйста оптимизировать код
    #39048902
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NOOBик,
Ну можно начать например с
Код: php
1.
2.
foreach ($KabinetsBody as $Kabinets){
$SRKs = $Kabinets['id_kabs'];



я бы вынес этот цикл и сделал:
Код: php
1.
2.
3.
4.
5.
6.
$SRKs="";
foreach ($KabinetsBody as $Kabinets){
if($SRKs) $SRKs.=" or ";
$SRKs.= $Kabinets['id_kabs'];
}
$SRKs="($SRKs)";



т.е в $RegResult-вы получите массив, а не одну строку, ну а ниже уже цикл в котором будут ваши условия.
...
Рейтинг: 0 / 0
Помогите пожалуйста оптимизировать код
    #39048924
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
+ если я не ошибаюсь, то
Любой запрос в котором только inner join можно расписать как from t1,t2,..tN where t1.id=t.id and ...
...
Рейтинг: 0 / 0
Помогите пожалуйста оптимизировать код
    #39049122
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kunaksergey+ если я не ошибаюсь, то
Любой запрос в котором только inner join можно расписать как from t1,t2,..tN where t1.id=t.id and ...
а зачем?
...
Рейтинг: 0 / 0
Помогите пожалуйста оптимизировать код
    #39049124
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
explain запроса покажи, да.
...
Рейтинг: 0 / 0
Помогите пожалуйста оптимизировать код
    #39049171
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kunaksergey+ если я не ошибаюсь, то
Любой запрос в котором только inner join можно расписать как from t1,t2,..tN where t1.id=t.id and ...
а смысл? тот же join, только читаемость в разы хуже

NOOBик,

попробуй так, плюс проверить связи в таблицах и может добавить индексы

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
$SRKs = array();
foreach ($KabinetsBody as $Kabinets) {
    $SRKs[] = $Kabinets['id_kabs'];
}

if (count($SRKs) > 0) {

    $ghArray = array();
    for ($GRHM = $Reg_Poch_Day_Hd; $GRHM < $Reg_Fin_Day_Hd; $GRHM++) {
        for ($SRHV = $Reg_Poch_Day_Hv; $SRHV < $Reg_END; $SRHV += $Reg_Period) {
            $ghArray[] = array(
                'GRHM' => $GRHM,
                'SRHV' => $SRHV
            );
        }
    }

    $idKabinetsCond = implode(',', $SRKs);

    $SQL_List_Broniv = mysql_query ("SELECT
                                    exp_resid.exp_bron_doc.date_broni,
                                    exp_resid.exp_bron_doc.id_kabinets,
                                                                    exp_resid.exp_bron_doc.name,
                                                                    exp_resid.exp_bron_doc.Z_time_G,
                                    exp_resid.exp_bron_doc.Z_time_H,
                                    exp_resid.exp_bron_doc.Po_time_G,
                                    exp_resid.exp_bron_doc.Po_time_H,
                                    exp_bron_doc.Z_time,
                                    exp_bron_doc.Po_time,
                                    exp_resid.exp_bron_doc.id_status_Poslugi
                                FROM
                                    exp_resid.exp_bron_doc
                                        INNER JOIN exp_klients.info_klients
                                            ON exp_klients.info_klients.id_klients = exp_resid.exp_bron_doc.id_klient
                                        INNER JOIN exp_resid.poslugi
                                            ON exp_resid.poslugi.id_poslugi = exp_resid.exp_bron_doc.id_posluga
                                WHERE
                                    exp_resid.exp_bron_doc.id_kabinets IN ({$idKabinetsCond}) AND
                                    exp_resid.exp_bron_doc.date_broni = $RegDateUnx
                                ORDER BY
                                    exp_resid.exp_bron_doc.Z_time_G DESC")or die (mysql_error());

    echo "<table><tr>";
    while($RegResult = mysql_fetch_assoc($SQL_List_Broniv)) {
        foreach($ghArray as $grhmSrhv) {
            $gh = $grhmSrhv['GRHM'] . $grhmSrhv['SRHV'];

            if ($RegResult['Z_time'] <= $gh && $RegResult['Po_time'] > $gh) {
                if($SRHV == $Reg_Poch_Day_Hv ){
                    echo "<td> {$grhmSrhv['GRHM']} </td>";
                } else {
                    echo "<td> {$grhmSrhv['SRHV']} </td>";
                }
                if($gh >= $RegResult['Z_time_G'] . $RegResult['Z_time_H'] && $gh < $RegResult['Po_time_G'] . $RegResult['Po_time_H']) {
                    echo "<td> ". $RegResult['name'] ."</td>";
                } else {
                    echo "<td> </td>";
                }
            }
        }
    }
    echo "</tr></table>";
} else {
    echo "Ничего не найдено";
}


...
Рейтинг: 0 / 0
Помогите пожалуйста оптимизировать код
    #39049639
NOOBик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kunaksergey,

Спосибо за ответ, но в етом коде надо вивести етот " $SQL_List_Broniv = mysql_query ("SELECT ..." запрос с цикла
...
Рейтинг: 0 / 0
Помогите пожалуйста оптимизировать код
    #39049644
NOOBик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SharuPoNemnogu,

Спосибо, пока мало что мне понятно но буду пробувать. Спосибо.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Помогите пожалуйста оптимизировать код
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]