Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Помогите пожалуйста оптимизировать код / 14 сообщений из 14, страница 1 из 1
11.09.2015, 09:20
    #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
11.09.2015, 09:36
    #39048710
kunaksergey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста оптимизировать код
NOOBик,
в коде я вижу 3 открывающихся скобки и 2 закрывающихся... далее не понятно, что вы делаете дальше с $RegResult. По этому коду он просто перезаписывается последним запросом.
...
Рейтинг: 0 / 0
11.09.2015, 10:04
    #39048742
NOOBик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста оптимизировать код
kunaksergey,

да, может пропустил когда копировал и вставлял )
...
Рейтинг: 0 / 0
11.09.2015, 10:13
    #39048766
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста оптимизировать код
опиши, что должен считать твой запрос, и что в переменных, которые в него подставляются, куда идет результат $RegResult, который как написали выше, тупо затирается. Сколько итераций делается?
Запрос в тройном цикле, я бы на месте мускуля возненавидел разработчика.
...
Рейтинг: 0 / 0
11.09.2015, 10:32
    #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
11.09.2015, 10:37
    #39048802
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста оптимизировать код
NOOBик,

а с $RegResult что в итоге?
...
Рейтинг: 0 / 0
11.09.2015, 11:02
    #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
11.09.2015, 11:28
    #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
11.09.2015, 11:38
    #39048924
kunaksergey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста оптимизировать код
+ если я не ошибаюсь, то
Любой запрос в котором только inner join можно расписать как from t1,t2,..tN where t1.id=t.id and ...
...
Рейтинг: 0 / 0
11.09.2015, 13:23
    #39049122
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста оптимизировать код
kunaksergey+ если я не ошибаюсь, то
Любой запрос в котором только inner join можно расписать как from t1,t2,..tN where t1.id=t.id and ...
а зачем?
...
Рейтинг: 0 / 0
11.09.2015, 13:24
    #39049124
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста оптимизировать код
explain запроса покажи, да.
...
Рейтинг: 0 / 0
11.09.2015, 13:42
    #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
11.09.2015, 19:18
    #39049639
NOOBик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста оптимизировать код
kunaksergey,

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

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


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