SQL查询跳过PHP for循环中的行

SQL查询跳过PHP for循环中的行,php,sql,mysqli,Php,Sql,Mysqli,我正在尝试使用PHP和mysql创建一个时间表 基本上我有一个for循环,从600到2200,在这个循环中,一周中的每一天都有一个从1到7的循环 在第二个for循环中,我在数据库中搜索一个事件,day等于第二个for循环中的迭代,并且开始和结束都在第一个for循环的范围内。我有两个事件需要返回。但是,它跳过第一个,只返回第二个 这是我的密码: $week = 1; for($i = 600; $i <=2200; $i += 25){

我正在尝试使用PHP和mysql创建一个时间表

基本上我有一个for循环,从600到2200,在这个循环中,一周中的每一天都有一个从1到7的循环

在第二个for循环中,我在数据库中搜索一个事件,
day
等于第二个for循环中的迭代,并且开始和结束都在第一个for循环的范围内。我有两个事件需要返回。但是,它跳过第一个,只返回第二个

这是我的密码:

        $week = 1;
        for($i = 600; $i <=2200; $i += 25){
            echo $i .'</br>';
            for($j = 1; $j < 8; $j++){
                echo $j .'</br>';
                $query = 'SELECT * FROM `event` WHERE `week` =:week AND `day` =:day AND (`start` <=:start AND `end` >=:start)';
                $stmt = $dbh->prepare($query);
                $stmt->bindParam(':week', $week);
                $stmt->bindParam(':day', $j);
                $stmt->bindParam(':start', $i);
                if($stmt->execute()){
                    if($stmt->rowCount() > 0){
                        $row = $stmt->fetch(PDO::FETCH_ASSOC);
                        print_r($row);
                    }
                }
            }
在这两种情况下,我得到了相同的结果

这是我的事件表中的内容

只要$i等于900,它就应该返回id 9的行,但它不返回,但当$i等于1875时,它会打印出该事件

这里有一张图片,当我试图把它直接放在phpmyadmin中


有人知道这是为什么吗?

问题是“开始”和“结束”数据类型,刚刚意识到它们是varchar而不是int。

这似乎是一种非常低效的查询MySQL数据库的方法。为什么首先要使用这些循环?请向我们展示示例输入/输出,并解释您在这里尝试执行的操作。当您使用硬代码参数运行SQL时,
:start=900
是否有效?@Tim Biegeleisen我正在尝试创建一个时间表,$i是从上午6:00到晚上10:00的时间,$j是一周中的一天。输出只是现在测试,它回显时间$i,然后每天回显$j。在$i=900时,我希望打印我的行,但它没有打印,然后在$i=1875时,它打印事件id=4。@David Winder是的,我将在我的帖子中添加一张图片来显示。我没有看到预先设置的$day和$start变量,比如设置了$week,也许这就是问题所在?我同意@Tim Biegeleisen的观点,例如,通过一个MySQL查询,这个问题可以得到更好的处理
SELECT *
FROM `event`
WHERE `week` =:week AND `day` =:day AND (:start  BETWEEN `start` AND `end`)