【问题标题】:Retrieve data from a database and display in one cell of a table从数据库中检索数据并显示在表格的一个单元格中
【发布时间】:2015-11-06 03:29:58
【问题描述】:

我正在使用 php、javascript 和 html 构建一个医生预约系统。我在表格的一个单元格中显示多个数据库结果时遇到问题。例如,我有一个一周表,显示一周中 5 天的日期以及 9-5 个时间段。我有一个数据库,每周 5 天保存 9-5 天的数据。 (希望这是有道理的)。我有一个名为约会可用性的列名称,所有插槽都设置为 Y。(所以它们都是可用的)。我的问题是我想在每个表格单元格中显示所有可用医生的医生 ID。我不确定如何执行此操作,并且此刻它在我的 html 表的新行上显示每个医生 ID ......每个单元格都应该显示医生 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]?>

“医生可用性表”是问题所在。如您所见,它打印了 3 次相同的医生 ID,而它应该显示 1,2,3 而不是 1,1,1。

我希望这是有道理的,我已经尝试了好几天,但没有运气。在谷歌上找不到任何东西或堆栈溢出来帮助解决这个问题。任何想法、解决方案或如果有人能指出我正确的方向,将不胜感激!

我刚刚意识到这种方法将是公平的太长和非常糟糕的编程实践。我将不得不运行许多不同的查询来填充表格,因为查询正在获取日期和时间,并且表格的每一行都是不同的日期和时间。

有没有更简洁的方法来做到这一点?

我只想显示一个表格,显示 3 位医生的可用性。一周内的每一天。

【问题讨论】:

  • 您正在依次显示 $row['docter_id'] 3x。迭代器不在下一行。您的选择查询返回 3 行,每个医生一行
  • 您需要对单个 td 标签进行循环。
  • 没有。问题在于您未能掌握规范化的概念(起初它可能是一个棘手的概念)。数据库表不是电子表格。
  • 您正在寻找的是交叉表或数据透视表。如果您是 mysql 新手,这会很棘手,但是您可以在单个查询中完成此操作。

标签: php html mysql html-table


【解决方案1】:

我自己实际上不会这样做,但我希望它能显示原理

改变

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>";

【讨论】:

  • 那里有一个不匹配的结束 div
  • @RamRaider 根本不应该是一个 div ;-)
  • @Dagon 非常感谢,这已经奏效了。我知道我采取的方法很混乱,但我不确定如何让它变得更好。我已经阅读了 jQuery,但不确定这是否是正确的方法。你有任何关于如何实际解决这个问题的提示或信息吗?
【解决方案2】:
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>";

【讨论】:

    【解决方案3】:

    您可以使用 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 约会可用性。

    【讨论】:

      【解决方案4】:

      您的脚本中发生了很多事情,使您很难理解。要简单地将 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 来填补空白,而不是反过来。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-07
        • 2014-05-20
        • 2017-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多