sql?where

伟洪winnie 2015-11-27 10:09:55
查出大于或等于当前时间的event_start_date Ace
查出 小于 当前时间的event_start_date Desc
如何将这两个条件用一条sql来表示
...全文
108 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xuzuning 2015-11-27
所以这个需求通过日期差排序比较直观 to_days 是求从 0 年起的天数,于是 to_days(event_start_date)-to_days(now()) 就是两个日期间相差的天数了 order by to_days(event_start_date)-to_days(now())>=0 desc, abs(to_days(event_start_date)-to_days(now())) 中 to_days(event_start_date)-to_days(now())>=0 desc 表示将天数差大于等于 0 的排在前面 abs(to_days(event_start_date)-to_days(now())) 表示将天数差的绝对值升序排列(也就是日期降序了)
回复
引用 13 楼 xuzuning 的回复:
SELECT *FROM table where event_start_date>=CURDATE() ORDER BY event_start_date ASC 这个查询本身没有错 但是放在 union 中就错了,因为有 order by 排序一下本身没问题,但作为计算表出现 select * from (SELECT *FROM table where event_start_date>=CURDATE() ORDER BY event_start_date ASC) t
明白了,学习了!
回复
xuzuning 2015-11-27
SELECT *FROM table where event_start_date>=CURDATE() ORDER BY event_start_date ASC 这个查询本身没有错 但是放在 union 中就错了,因为有 order by 排序一下本身没问题,但作为计算表出现 select * from (SELECT *FROM table where event_start_date>=CURDATE() ORDER BY event_start_date ASC) t
回复
在整个SQL语句之后加上order排序一下,是不是可以消除2楼的错误。

((SELECT *FROM table where event_start_date>=CURDATE() ORDER BY event_start_date ASC) UNION (SELECT *FROM table WHERE event_start_date<CURDATE() ORDER BY event_start_date DESC)) ORDER BY event_start_date;
回复
伟洪winnie 2015-11-27
秒不比较?
回复
2楼写的是对的。。。今天真是有点晕
引用 6 楼 xuzuning 的回复:
这个效果?
event_start_date 
2015-11-30 
2015-12-17 
2015-11-10 
2015-01-27 
2014-11-24 
用联合
select * from
 (select * from tbl_name where event_start_date >= now() order by event_start_date) t1
union
select * from
 (select * from tbl_name where event_start_date < now() order by event_start_date desc) t2
用优先排序
select *
 from T
 order by
  to_days(event_start_date)-to_days(now())>=0 desc,
  abs(to_days(event_start_date)-to_days(now())) 
版主的这个答案是正确的。。我没有注意到union时order的问题
回复
xuzuning 2015-11-27
二楼是错的! 联合中的 order 只能出现在最后
回复
伟洪winnie 2015-11-27
引用 5 楼 misakaqunianxiatian 的回复:
二楼写的是对的……今天真晕乎…
分开没问题 合在一起时 2015-12-17 会在 2015-11-30 之上
回复
xuzuning 2015-11-27
这个效果?
event_start_date 
2015-11-30 
2015-12-17 
2015-11-10 
2015-01-27 
2014-11-24 
用联合
select * from
 (select * from tbl_name where event_start_date >= now() order by event_start_date) t1
union
select * from
 (select * from tbl_name where event_start_date < now() order by event_start_date desc) t2
用优先排序
select *
 from T
 order by
  to_days(event_start_date)-to_days(now())>=0 desc,
  abs(to_days(event_start_date)-to_days(now())) 
回复
引用 5 楼 misakaqunianxiatian 的回复:
二楼写的是对的……今天真晕乎…
确实晕了,二楼正确
回复
伟洪winnie 2015-11-27
回复
二楼写的是对的……今天真晕乎…
回复
我脑残了,刚才写的有问题。还是等楼下回答吧
回复
刚才写的有有误:
(SELECT *FROM table where event_start_date>=CURDATE() ORDER BY event_start_date ASC) UNION (SELECT *FROM table WHERE event_start_date<CURDATE() ORDER BY event_start_date DESC);
回复
$date = date('Y-m-d');
$sql = "(SELECT *FROM table where event_start_date>=" . $date .  "ASC) UNION (SELECT *FROM table where event_start_date<" . $date . "DESC)";
回复
相关推荐
发帖
PHP
创建于2008-08-27

1.9w+

社区成员

“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
申请成为版主
帖子事件
创建了帖子
2015-11-27 10:09
社区公告
暂无公告