хорошо, поэтому я пытаюсь выбрать строки из БД, чтобы увидеть, есть ли какие-либо столкновения в календаре, и я столкнулся с другой проблемой
вот мой код
$query3 = $dbh->prepare("SELECT * FROM calendar_" . $companyID . " WHERE (calTime+duration) > :calstart AND (calTime+duration) <= (:calend + (duration-(:calend-calTime))) AND agentID = :agentID ORDER BY calTime ASC");
$query3->bindParam(':calstart', $time);
$calend = $time + $duration;
$query3->bindParam(':calend', $calend);
, который выглядит примерно так в более читаемом SQL
SELECT * FROM calendar_01 WHERE (calTime + duration) > 1331386200
AND (calTime + duration) <= ( 1331388000 + ( duration - ( 1331388000 - calTime ) ) )
AND agentID =1
ORDER BY calTime ASC
LIMIT 0 , 30
нижняя граница, очевидно, работает нормально, однако с верхней границей у меня возникает проблема, когда, если продолжительность события составляет 7200 2 часа, и кто-то пытается ввести новое событие, которое, скажем, только 1800, и начинается через 1800 после первого позволит это, даже если введенное событие имеет длину 7200 и фактически перекрывает новое событие. Поэтому мне нужно, чтобы верхняя граница была динамической в том смысле, что если: calend <(calTime + duration), тогда выберите строку, в противном случае используйте: calend в качестве верхней границы. </p>
Я, хотя я был почти прав в том, что я пытался, однако, эта часть
( 1331388000 + ( duration - ( 1331388000 - calTime ) ) )
в некоторых случаях заканчивается минусом, поэтому верхняя граница очень большая и включает строки, когда их не должно быть