我正在使用 codeignitor,我必须一次发布一个问题。对于每个问题,我都有一个发布日期、发布时间和结束日期、结束时间。因此,它就像“我们必须在 9 月 28 日晚上 9:00 到 10 月 2 日上午 11:00 发布问题 X”。开始和结束的日期和时间都存储在单独的列中。
因此,对于每个问题,我都有 4 列作为 publish_date、publish_time、end_date 和 end_time。
现在我想运行一个查询来检查数据库中是否有选定时间段的行,如果没有,我可以在该时间范围内创建一个新问题。我试过的问题是:
$query_check = $this->db->query("... (see query below) ...");
SQL查询如下:
SELECT question_id
FROM questions
WHERE
(
publish_date < '".$publish_date."'
AND
end_date > '".$publish_date."'
AND question_id NOT in (".$question_id.")
)
OR
(
publish_date < '".$end_date."'
AND end_date > '".$end_date."'
AND question_id NOT in (".$question_id.")
)
OR
(
publish_date > '".$publish_date."'
AND
publish_date < '".$end_date."'
AND
question_id NOT in (".$question_id.")
)
OR
(
end_date > '".$publish_date."'
AND
end_date < '".$end_date."'
AND question_id NOT in (".$question_id.")
)
OR
(
'".$publish_date."' = publish_date
AND
'".$publish_time."' >= publish_time
AND
'".$publish_time."' < end_time
AND question_id NOT in (".$question_id.")
)
OR
(
'".$publish_date."' = end_date
AND
'".$publish_time."' < end_time
AND
'".$publish_time."' >= publish_time
AND question_id NOT in (".$question_id.")
)
OR
(
'".$end_date."' = publish_date
AND
'".$end_time."' > publish_time
AND
'".$end_time."' <= end_time
AND
question_id NOT in (".$question_id.")
)
OR
(
'".$end_date."' = end_date
AND
'".$end_time."' <= end_time
AND
'".$end_time."' > publish_time
AND question_id NOT in (".$question_id.")
)
我错过了很多场景。就好像问题 A 是从 9 月 28 日下午 2:00 到 9 月 29 日下午 2:00 一样,我仍然可以在 9 月 27 日下午 2:00 到 9 月 29 日下午 3:00 的时间段内创建一个新的问题 B。这不应该发生,因为问题 A 出现在问题 B 的时间段内。因此,理想情况下,上述查询应该返回 0 行。
任何人都可以帮助我。任何想法或帮助都将受到高度评价