2017-08-03 29 views
1

我有一件小事,基本上我将结果从一张表中取出,它具有'from'(日期时间)和'to'(日期时间)字段,但我只拿出那些'从'=今天或'到'=今天,但我不能做的是在日期时间排序他们,没有首先'从'和'到',我想把它们混合起来,并按时间排序。SQL订单表结果由2个日期时间字段组成

结果的一个例子是:

name   from/to  date time 
lorem   from  03/08/2017 10:38 
ipsum   to   03/08/2017 11:25 
lorem   from  03/08/2017 12:10 

查询我的尝试:

SELECT * 
    FROM bookings 
WHERE "'.$date.'"=LEFT(from, 10) 
    OR "'.$date.'"=LEFT(to, 10) 
ORDER BY date time 

这导致其通过从/向及日期时间排序的列表

+2

也许添加您预期的结果,因为我不完全理解你想要去的这 – Jens

+3

(1 )用你正在使用的数据库标记你的问题。 (2)提供你写的查询。 (3)你想要什么结果? –

+0

只是在查询结尾处放置'ORDER BY date time'? – RealCheeseLord

回答

0

据我所知,你正在寻找类似的东西:

首先选择以获得与从 - 日期 - 我添加了一个偶数rownumber。 秒选择以获得行与迄今为止 - 我添加了ODD rownumber

最后我只是用rownumber排序它们。因为他们甚至还有奇怪的流浪汉,他们会混合在一起。

SELECT a.name 
     ,a.from_to 
     ,a.mydate 
    FROM 
    (
    SELECT name 
      ,'from' AS from_to 
      ,date_from as mydate 
      ,(ROW_NUMBER() OVER (ORDER BY name)) * 2  AS rownum 
    WHERE date_from = CONVERT(DATE, GETDATE()) 
    UNION ALL 
    SELECT name 
      ,'to' AS from_to 
      ,date_to as mydate 
      ,(ROW_NUMBER() OVER (ORDER BY name)) * 2 + 1 AS rownum 
    WHERE date_to = CONVERT(DATE, GETDATE())  
    ) a 
ORDER BY a.rownum 
+0

这不会“混合”的结果,虽然 – RealCheeseLord

+1

@RealCheeseLord哦...我没有读过“混合”。我刚刚更新了我的回答 –

+0

我想你再次误解了:D他希望命令只依赖于日期。从和应该不重要。但由于某种原因,他的querry命令从和到。至少多数民众赞成在我认为他的意思 – RealCheeseLord

0

假设你正在使用SQL Server,结合了UNION运算符来合并FROM和TO的数据集,然后公用表表达式来选择基于您条件的结果集的记录。

;with cte as 
(
    select name, 'from' [field], [from] [datetime] from foo 
    union all 
    select name, 'to' [field], [to] from foo 
) 
select name, field, [datetime] 
from cte 
where convert(date, [datetime]) = '03/08/2017' 
order by 3 

这里有一个SqlFiddle证明

+0

我使用phpMyAdmin,我试图做的查询通过PHP和前端得到的结果,这将工作以及呢? – alexcr

0

我已经解决了这个问题

SELECT *, (CASE WHEN "'.$date.'" = LEFT(`from`, 10) THEN `from` 
       WHEN "'.$date.'" = LEFT(`to`, 10) THEN `to` 
      END) AS ttime 
FROM `bookings` WHERE "'.$date.'"=LEFT(`from`, 10) OR "'.$date.'"=LEFT(`to`, 10) ORDER BY ttime