首页 文章

SQL:如何从两列中选择日期数据并使用两列对其进行排序

提问于
浏览
2

我正在构建一个PHP / MySQL查询,该查询列出了指定时间段内(例如一天)数据库中的所有预留 . 所有预订都有开始日期和结束日期 . 我需要列出它们,以便按升序显示它们1)start_date / end_date =在指定的时间段2之间)start_date和end_date可以在句点内,因此它应该有1个结果用于start_date而另一个用于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

因此,我需要帮助根据 two columns 对结果进行排序,并且对于在指定时间段内同时具有start_date和end_date的行具有 duplicate result .

UPDATE

现在我到目前为止已经得到了正确的结果,并且行根据日期(start_date / end_date)按升序排序 . 但是如果我有人在同一天检查输入(即重复行),我当前的查询会背对背地列出行,尽管我希望根据检出时间排序第二行 .

这是我到目前为止所拥有的:

select * from(SELECT id,start_date,end_date FROM reservations WHERE start_date BETWEEN'2017-01-03 00:00:00'EN'2017-01-03 23:59:59'OR_ndatedate BETWEEN'2017-01-03 00:00:00'AND'2017-01-03 23:59:00'union all SELECT id,start_date,end_date FROM reservations WHERE start_date BETWEEN'2017-01-03 00:00:00'EN'2017-01- 03 23:59:59'AND end_date BETWEEN'2017-01-03 00:00:00'''2017-01-03 23:59:00')按顺序排列WHEN start_date BETWEEN'2017-01-03 00:00:00'和'2017-01-03 23:59:59'那么start_date ELSE end_date END ASC

1 回答

  • 1

    您需要UNION ALL来复制行,因为OR条件将包含它们一次,您可以添加AND条件以仅复制完全落入该日期范围的条件,如下所示:

    select * from (
        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' 
        union all
        SELECT *  
        FROM `reservations` 
        WHERE `start_date` BETWEEN '2017-01-04 00:00:00' AND '2017-01-04 23:59:59' 
          AND `end_date` BETWEEN '2017-01-04 00:00:00' AND '2017-01-04 23:59:00' 
        ) as tbl
    order by start_date, end_date
    

相关问题