SQL查询跳过PHP内的行进行循环

时间:2018-09-02 13:40:15

标签: php sql mysqli

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

基本上,我有一个for循环,范围从600到2200,在该循环内,另一个循环在一周的每一天从1到7。

在第二个for循环内,我在数据库中搜索一个事件,其中day等于第二个循环内的迭代,并且开始和结束都在第一个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);
                    }
                }
            }

我也尝试过

SELECT *
FROM `event`
WHERE `week` =:week AND `day` =:day AND (:start  BETWEEN `start` AND `end`)

在两种情况下我都得到相同的结果。

这是我的事件表中的内容 enter image description here

在$ i等于900时,它应该返回id 9的行,但是不会,但是在$ i为1875时,它会打印出该事件。

当我尝试将其直接放在phpmyadmin中时,这是一张图片

enter image description here

任何人都可以看到为什么吗?

1 个答案:

答案 0 :(得分:0)

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