【发布时间】:2026-02-23 02:25:02
【问题描述】:
我正在构建一个 PHP/MySQL 查询,该查询列出了指定时间段内(例如一天)内数据库中的所有预订。所有预订都有开始日期和结束日期。我需要将它们列出,以便它显示它们 1) 按升序显示,其中 start_date/end_date = 在指定期间 2) start_date 和 end_date 可以在该期间内,因此 start_date 应该有 1 个结果,end_date 应该有另一个结果
SELECT *
FROM `reservations`
WHERE `start_date` BETWEEN '2017-01-04 00:00:00' AND '2017-01-04 23:59:59'
OR `end_date` BETWEEN '2017-01-04 00:00:00' AND '2017-01-04 23:59:00'
order by start_date, end_date
因此,我需要帮助根据 两列 对结果进行排序,并且对于在指定时间段之间同时具有 start_date 和 end_date 的行具有 重复结果。
更新
到目前为止,我已经得到了正确的结果,并且行是根据日期(开始日期/结束日期)升序排列的。 但是,如果我有人在同一天签入(即重复行),我当前的查询会连续列出这些行,尽管我希望根据签出时间对第二行进行排序。
这是我目前所拥有的:
select * from ( SELECT id, start_date, end_date FROM
reservationsWHEREstart_dateBETWEEN '2017-01-03 00:00:00' AND '2017-01-03 23:59:59' OR @987654324 @ BETWEEN '2017-01-03 00:00:00' AND '2017-01-03 23:59:00' union all SELECT id, start_date, end_date FROMreservationsWHEREstart_dateBETWEEN '2017-01-03 00:00:00' 和 '2017-01-03 23:59:59' 和end_date在 '2017-01-03 00:00:00' 和 '2017-01-03 23:59:00' 之间)作为 tbl 按大小写顺序 WHEN start_date BETWEEN '2017-01-03 00:00:00' AND '2017-01-03 23:59:59' THEN start_date ELSE end_date END ASC
【问题讨论】:
-
你是要删除重复的结果还是别的什么
-
您的查询当前按 start_date 升序排序,然后按 end_date 排序(如果两个开始时间相等)。这不是你想要的吗?
-
我认为他想要的行,其中开始和结束日期适用于条件,结果两次。
-
ORDER BY 目前无法正常工作,因为我希望它可以正常工作。我希望它“组合”两列(start_date,end_date)并将它们按升序排列。目标是按日期和时间按正确顺序打印签入/签出客户列表。