php最小结果时间段

时间:2011-03-14 12:03:55

标签: php mysql for-loop

时间表:

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

3 个答案:

答案 0 :(得分:3)

可能只打印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;

答案 1 :(得分:0)

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

答案 2 :(得分:0)

根据 Times 的数据类型,尝试BETWEEN … AND … operator

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