Добрый вечер! В БД есть запись на услугу с 9:00 до 10:00 Сделал расписание, с таким условием чтобы было видно запись на 9:00 и при этом в период с 9:00 до 10:00 таких строк как 9:10, 9:20, 9:30, 9:40, 9:50 не было видно. В остальное время выводится "Свободно". Написал код: PHP: for ($i=0; $i < 24; $i++) { for ($j=0; $j < 6; $j++) { $t = $i / 2; if ($t < 5) { $h = '0'; } else { $h = ''; } $time = $h.$i.':'.$j.'0:00'; $time3 = $h.$i.':'.$j.'0'; $sel1 = mysql_query("SELECT * FROM gen_services WHERE time_st_serv='$time' and date_serv='$date' and num_box='1'"); $sel2 = mysql_query("SELECT * FROM gen_services WHERE time_st_serv<'$time' and date_serv='$date' and time_end_serv>'$time' and num_box='1'"); $row1 = mysql_num_rows($sel1); $row2 = mysql_num_rows($sel2); $tim1 = mysql_fetch_assoc($sel1, MYSQL_ASSOC); $name_cl = $tim1['name_cl']; if ($row1) { $db = 'display: block;'; $text = $name_cl; $time_st1 = mb_substr($tim1['time_st_serv'],0,5,'UTF-8'); // 1 запрос $time_end1 = mb_substr($tim1['time_end_serv'],0,5,'UTF-8'); $time_g = mb_substr($time_st1,0,5,'UTF-8').'-'.mb_substr($time_end1,0,5,'UTF-8'); } if ($row2) { $db = 'display: none;'; } if (!$row1 && !$row2) { $text = 'Свободно'; $db = 'display: block;'; $time_g = $time3; } echo '<div style="'.$db.'" class="block-serv"><p style="margin: 0;">'.$time_g.' '.$text.'</p></div>'; } } Код работает отлично, но есть одно НО - очень долго грузится страница Прошу помощи, может как то можно все это упростить
Сделал так PHP: $sel1 = mysql_query("SELECT id, name_cl FROM gen_services WHERE time_st_serv='$time' and date_serv='$date' and num_box='3'"); $sel2 = mysql_query("SELECT id FROM gen_services WHERE time_st_serv<'$time' and date_serv='$date' and time_end_serv>'$time' and num_box='3'"); но все равно загрузка идет около 5 секунд
https://php.ru/manual/function.microtime.html в начале скрипта напиши define("START_TIME", microtime(true)); потом везде пиши echo 1000 * (microtime(true) - START_TIME); и станет понятно когда что происходит
Убрал один запрос и немного подредактировал код. Время сократилось в два раза. На одно расписание время загрузки составило около 1с. Но так как у меня на одной странице три расписания, то время на загрузку выходит около 3-х сек. Получился такой код, на мой взляд минимальный PHP: for ($i=0; $i < 24; $i++) { $t = $i / 2; if ($t < 5) { $h = '0'; } else { $h = ''; } for ($j=0; $j < 6; $j++) { $time = $h.$i.':'.$j.'0:00'; $time3 = $h.$i.':'.$j.'0'; $sel1 = mysql_query("SELECT id, name_cl, time_st_serv, time_end_serv FROM gen_services WHERE time_st_serv='$time' and date_serv='$date' and num_box='1' || time_st_serv<'$time' and date_serv='$date' and time_end_serv>'$time' and num_box='1'"); $row1 = mysql_num_rows($sel1); if ($row1) { $tim1 = mysql_fetch_assoc($sel1, MYSQL_ASSOC); $name_cl = $tim1['name_cl']; $time_st1 = mb_substr($tim1['time_st_serv'],0,5,'UTF-8'); // 1 запрос $time_end1 = mb_substr($tim1['time_end_serv'],0,5,'UTF-8'); $time_g = $time_st1.'-'.$time_end1; if($time_st1 == $time3){ $db = 'display: block;'; $text = $name_cl; } elseif($time_st1<$time3 && $time_end1>$time3){ $db = 'display: none;'; $text = ''; } } else { $text = 'Свободно'; $db = 'display: block;'; $time_g = $time3; } echo '<div style="'.$db.'" class="block-serv"><p style="margin: 0;">'.$time_g.' '.$text.'</p></div>'; } }
В твоем случае можно было оптимизировать все намного проще: PHP: <?php $link = mysqli_connect("localhost", "my_user", "my_password", "world"); $query = "SELECT * FROM gen_services WHERE num_box='1'"; $result = mysqli_query($link, $query); $row = mysqli_fetch_array($result, MYSQLI_NUM); $rs = 0; for ($i=0; $i < 24; $i++) { for ($j=0; $j < 6; $j++) { $t = $i / 2; if ($t < 5) { $h = '0'; } else { $h = ''; } $time = $h.$i.':'.$j.'0:00'; $time3 = $h.$i.':'.$j.'0'; if( $row['time_st_serv'] == $time && $row['data_serv'] == $data ) { $db = 'display: block;'; $text = $name_cl; $time_st1 = mb_substr($row['time_st_serv'],0,5,'UTF-8'); // 1 запрос $time_end1 = mb_substr($row['time_end_serv'],0,5,'UTF-8'); $time_g = mb_substr($time_st1,0,5,'UTF-8').'-'.mb_substr($time_end1,0,5,'UTF-8'); $rs=1; } if( $row['time_st_serv'] < $time && $row['data_serv'] == $data && $row['time_end_serv'] > $time ) { $db = 'display: none;'; $rs=1; } $name_cl = $row['name_cl']; if( $rs == 0 ) { $text = 'Свободно'; $db = 'display: block;'; $time_g = $time3; } echo '<div style="'.$db.'" class="block-serv"><p style="margin: 0;">'.$time_g.' '.$text.'</p></div>'; } } --- Добавлено --- И перейди ты уже на mysqli или PDO, расширение mysql_* уже давно умерло - это как использовать бейсик для создания игры. )
Ты запроси все занятые промежутки на целый день сначала, а потом в цикле проверяй, входит ли время в один из них, или нет --- Добавлено --- А так ты каждые 10 минут отдельно запрашиваешь, конечно, базу убьёшь нахрен