php минимальный временной интервал результата

#php #mysql #for-loop

#php #mysql #цикл for

Вопрос:

Таблица временных интервалов:

 id   Times
------------
1    10:00
2    10:30
3    11:00
4    11:30
5    12:00
6    12:30
7    13:00
8    13:30
9    14:00
10   14:30

$q = $db->query("SELECT * FROM timeslot");
while($r = $q->fetch_array(MYSQLI_ASSOC)) :
  echo '<tr>';
  echo '<td>'.$r['times'].'</td>';
  echo '</tr>';
endwhile;
  

как мне отобразить только временной интервал с 10:00 до 12:00 (id: 1-5). как насчет использования forloop?

 while($r = $q->fetch_array(MYSQLI_ASSOC)) :
  for($i; $i<=5; $i  ) {
    echo '<tr>';
    echo '<td>'.$r['times'].'</td>';
    echo '</tr>';
  }
endwhile;
  

он показывает пять временных интервалов, но время показывает неправильное время (все 10:00)? пожалуйста, помогите. есть другое решение?

Результат

 times:
10:00
10:00
10:00
10:00
10:00
  

Ответ №1:

Возможно, лучший способ напечатать только 5 — это выбрать только 5

 $q = $db->query("SELECT * FROM timeslot ORDER BY times LIMIT 5");
while($r = $q->fetch_array(MYSQLI_ASSOC)) :
  echo '<tr>';
  echo '<td>'.$r['times'].'</td>';
  echo '</tr>';
endwhile;
  

Проблема с вашим WHILE / FOR заключается в том, что цикл WHILE получает только одну запись, затем FOR выполняется 5 раз для одной и той же записи.

 while($r = $q->fetch_array(MYSQLI_ASSOC)) :
   for($i; $i<=5; $i  ) {   // each one uses the same $r
  

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

 $i = 0;
while(($r = $q->fetch_array(MYSQLI_ASSOC)) amp;amp; ($i < 5)) :
  echo '<tr>';
  echo '<td>'.$r['times'].'</td>';
  echo '</tr>';
  $i  ;
endwhile;
  

Ответ №2:

 $q = $db->query("SELECT * FROM timeslot WHERE id BETWEEN 1 AND 5");
  

Ответ №3:

В зависимости от типа данных раз, попробуйте BETWEEN … AND … оператор:

 SELECT *
FROM timeslot
WHERE Times BETWEEN "10:00" AND "12:00";