我正在使用php,javascript和html构建医生预约系统。我在表的一个单元格中显示多个数据库结果时遇到问题。例如,我有一周的表格显示一周5天的日期以及9-5个时段。我有一个数据库,每周5天保存9-5的数据。 (希望有道理)。我有一个名为appointment_availability的列名,所有插槽都设置为Y.(因此它们都可用)。我的问题是我想在每个表格单元格中显示所有可用医生的doctor_id。我不确定如何做到这一点,并且在我的html表的新行上显示每个doctor_id时......每个单元格应显示doctor_id 1,2& 3因为每个小时,每周都有医生。我知道这可能不太清楚,但很难解释......
我的代码是:
<?php
echo "
<table width='80%' align='center' >
<div id='head_nav'>
<tr>";
echo"<th>Time</th>
<th>02-11-2015</th>
<th>03-11-2015</th>
<th>04-11-2015</th>
<th>05-11-2015</th>
<th>06-11-2015</th>
</tr>
</div>";
$sql = "SELECT doctor_id FROM appointment_slots WHERE appointment_avaliability = 'Y' AND appointment_date = '2015-11-02' AND appointment_time = '09:00:00';";
$result = $conn->query($sql);
while ($row = $result->fetch_assoc()) {
echo "<tr>";
echo "<th>09:00 - 10:00</th>";
echo "<td>" .$row['doctor_id'] . $row['doctor_id'] . $row['doctor_id'] . "</td>";
echo "<td> </td>";
echo "<td></td>";
echo "<td></td>";
echo "<td></td>";
echo "</div>";
echo "</tr>";
}
echo "<tr>
<th>10:00 - 11:00</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</div>
</tr>
<tr>
<th>11:00 - 12:00</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</div>
</tr>
<tr>
<th>12:00 - 01:00</td>
<td> </td>
<td></td>
<td></td>
<td></td>
<td></td>
</div>
</tr>
<tr>
<th>01:00 - 02:00</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</div>
</tr>
<tr>
<th>02:00 - 03:00</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</div>
</tr>
<tr>
<th>03:00 - 04:00</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</div>
</tr>
<tr>
<th>04:00 - 05:00</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</div>
</tr>";
echo "</table>";
[![Image displaying my problem][1]][1]?>
&#34;医生可用性表&#34;是问题所在。正如你所看到的那样,它将打印相同的doctor_id 3次,因为它应该显示1,2,3而不是1,1,1。
我希望这是有道理的,我一直在努力解决这个问题,并且没有运气。在谷歌或堆栈溢出找不到任何东西来帮助解决这个问题。任何想法,解决方案或任何人都可以指出我正确的方向,将非常感谢!!
我刚刚意识到这种方法会花费太长时间并且编程实践非常糟糕。我将不得不运行许多不同的查询来填充表格,因为查询获取的是日期和时间,表格的每一行都是不同的日期和时间。
有没有更干净的方法呢?
我只想显示一张显示3位医生可用性的表格。为期一周的每一天。
答案 0 :(得分:2)
我自己实际上并不这样做,但我希望它能显示原则
更改
while ($row = $result->fetch_assoc()) {
echo "<tr>";
echo "<th>09:00 - 10:00</th>";
echo "<td>" .$row['doctor_id'] . $row['doctor_id'] . $row['doctor_id'] . "</td>";
echo "<td> </td>";
echo "<td></td>";
echo "<td></td>";
echo "<td></td>";
echo "</div>";
echo "</tr>";
}
到
echo "<tr><th>09:00 - 10:00</th><td>";
while ($row = $result->fetch_assoc()) {
echo $row['doctor_id'];
}
echo "</td><td> </td>";
echo "<td></td>";
echo "<td></td>";
echo "<td></td>";
// echo "</div>"; and remove the open div
echo "</tr>";
答案 1 :(得分:1)
echo "<tr>";
echo "<th>09:00 - 10:00</th>";
echo "<td>";
while ($row = $result->fetch_assoc()) {
echo $row['doctor_id']
}
"</td>";
echo "<td> </td>";
echo "<td></td>";
echo "<td></td>";
echo "<td></td>";
echo "</div>";
echo "</tr>";
答案 2 :(得分:0)
您使用GROUP_CONCAT为您处理。但它只是MySQL;
SELECT GROUP_CONCAT(doctor_id SEPARATOR ',') as ids
FROM appointment_slots
WHERE appointment_avaliability = 'Y'
AND appointment_date = '2015-11-02'
AND appointment_time = '09:00:00'
如果您处于严格模式,则可能需要GROUP BY appointment_avaliability。
答案 3 :(得分:-1)
你的脚本中发生了很多事情,这使得它很难理解。要简单地将mysql查询打印到表中,您可以使用以下代码
<table>
<?php
$res = mysqli_query("select * from table");
for ($row == mysqli_fetch_row($res)
{
?>
<tr>
<td><?php echo $row[0]?><td>
<td><?php echo $row[1]?><td>
<td><?php echo $row[2]?><td>
</tr>
<?php
}
?>
</table>
如果需要,您也可以使用循环替换,但您需要修复逻辑并使查询更具动态性
你还需要用HTML作为基础和php来重写你的代码,以填补空白,而不是相反。