Я пытаюсь создать расписание с помощью 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`)
и в обоих случаях я получаю одинаковый результат.
Вот что находится внутри моей таблицы событий

как только $ i становится равным 900, он должен вернуть строку с идентификатором 9, но это не так, но когда $ i равно 1875, он распечатывает это событие.
Вот изображение, когда я пытаюсь поместить его прямо в phpmyadmin
Кто-нибудь может понять, почему это так?
Когда вы запускаете SQL с параметрами жесткого кода, когда :start = 900 работает?
@Tim Biegeleisen Я пытаюсь создать расписание, $ i - это время с 6:00 до 22:00, а $ j - день недели. Выходные данные - просто проверить прямо сейчас, он отображает время $ i, а затем повторяет $ j для каждого дня. При $ i = 900 я ожидаю print_r моей строки, но это не так, тогда при $ i = 1875 выводится событие id = 4.
@ Дэвид Уиндер: да, я добавлю картинку в свой пост, чтобы показать.
Я не вижу, чтобы переменные $ day и $ start были установлены заранее, как будто установлена $ week, может быть, в этом проблема? и я согласен с @Tim Biegeleisen, проблему можно лучше решить с помощью одного запроса MySQL, например
@GuyL start и day - это $ i и $ j соответственно
Но их первое распределение происходит только после, выполняется 1-я итерация запроса.
@GuyL Я не уверен, что вы имеете в виду, $ i и $ j определены перед запросом: start и: day привязывают их к соответствующим переменным.
прочитайте свой код, вы привязываете $ i и $ j после, SQL-запрос выполняется, это означает, что на 1-й итерации они не связаны






Проблема заключалась в типах данных start и end, просто понял, что они были varchar, а не int.
Это кажется действительно неэффективным способом запроса базы данных MySQL. Почему вы в первую очередь используете эти петли? Покажите нам пример ввода / вывода и объясните, что вы здесь пытаетесь сделать.