简体   繁体   English

如何跳出 sql 查询无限循环

[英]How do I break out of an sql query infinite loop

running this outputs every result from 100 to 165 times.运行此输出每个结果 100 到 165 次。 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();
}
?>

You are missing the link to the room table, so it is selecting all rooms for each combination.您缺少room表的链接,因此它正在为每个组合选择所有房间。

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...您还可以尝试新的 JOIN 表示法...

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.我还建议查看准备好的语句以防止 SQL 注入等。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM