我正在使用编码点火器,我必须一次发布一个问题。对于每个问题,我都有一个发布日期,发布时间和结束日期,结束时间。因此,它就像"我们必须在 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 是从 28 九月 2:00PM 到 29 九月 2:00 下午 ,我仍然可以为 9 月 27 日下午 2:00 到 9 月 29 日下午 3:00 创建一个新的问题 B。当问题 A 出现在问题 B 的时间段内时,这种情况不应该发生。所以理想情况下,上面的查询应该返回 0 行。
任何人都可以在这方面帮助我。任何想法或帮助都将受到高度赞赏
你试过 BETWEEN 子句吗?
SELECT question_id FROM questions
where '".$publish_date."' BETWEEN publish_date AND end_date
AND '".$publish_time." BETWEEN publish_time AND end_time
我的理解是,您要检查由publish_date
,publish_time
,end_date
和end_time
定义的时间段是否与任何已经存在的问题的时间段重叠。
结束之前开始,在另一个时间段开始之后结束,则该时间段与另一个时间段重叠。为了有效地执行此操作,您必须将所有日期和时间合并为日期时间。您可以简单地使用字符串串联,比较将正常工作。
SELECT question_id
FROM questions
WHERE '".$publish_date." ".$publish_time."' < CONCAT(end_date, ' ', end_time)
AND '".$end_date." ".$end_time."' > CONCAT(publish_date, ' ', publish_time)
'".$publish_date." ".$publish_time."' < CONCAT(end_date, ' ', end_time)