Возможно, лучший способ печати только 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 вы можете использовать переменную-счетчик для выхода из цикла while
$i = 0;
while(($r = $q->fetch_array(MYSQLI_ASSOC)) && ($i < 5)) :
echo '<tr>';
echo '<td>'.$r['times'].'</td>';
echo '</tr>';
$i++;
endwhile;