douhuan1937 2018-08-28 18:50 采纳率: 0%
浏览 65
已采纳

如何突破sql查询无限循环

running this outputs every result from 100 to 165 times. Seems like an infinite loop, but i've got no clue how to break out of it or identify the problem. Any help is appreciated.

    $sql = "SELECT *
FROM timetable t, class c, room r
WHERE c.id = t.class AND t.week = '".$_GET['week']."' AND t.id = '".$_GET['class']."' 
ORDER BY CASE
          WHEN Day = 'Sunday' THEN 1
          WHEN Day = 'Monday' THEN 2
          WHEN Day = 'Tuesday' THEN 3
          WHEN Day = 'Wednesday' THEN 4
          WHEN Day = 'Thursday' THEN 5
          WHEN Day = 'Friday' THEN 6
          WHEN Day = 'Saturday' THEN 7
      ELSE Day
     END ASC, Hour;
";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo "Timetable of the class: ".$_GET['class']."";
    echo "<table>";
    while($row = $result->fetch_assoc()) {


        echo "<tr>";
        echo "<td>" . $dan . "</td><td>". $row["ura"] . "</td><td>". $row["razred"] . "</td><td>" . $ucilnica . "</td><td>" . $row["ucitelj"] . "</td>";
        echo "</tr>";
        }
    echo "</table>";
} else {
    echo "0 results";
}
$conn->close();
}
?>
  • 写回答

1条回答 默认 最新

  • dongzhi6382 2018-08-28 19:13
    关注

    You are missing the link to the room table, so it is selecting all rooms for each combination.

    SELECT *
    FROM timetable t, class c, room r
    WHERE r.? = ?.? AND c.id = t.class AND t.week ...
    

    You can also try the new JOIN notation...

    SELECT *
    FROM timetable t
    JOIN class c ON c.id = t.class
    JOIN room r ON ?
    WHERE t.week...
    

    I would also suggest looking into prepared statements to protect against SQL injection etc.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址