Mysql - 按两列排序

时间:2011-04-07 12:19:38

标签: mysql

我有两张桌子:

  

事件:id,name,date_from,date_to

     

event_recurrences :id,event_id,date_from,date_to

事件记录:

1, 'test 1', '2011-03-03 23:00:00', NULL
2, 'test 2', '2011-03-05 23:00:00', NULL
3, 'test 3', '2011-03-12 23:00:00', NULL

事件重复记录:

1, 1, 2011-03-10 23:00:00, NULL
2, 1, 2011-03-17 23:00:00, NULL
3, 1, 2011-03-24 23:00:00, NULL

现在我想获得所有活动并获得正确的排序,这是我现在的问题。

我的方法:

SELECT e.*, r.*
FROM events AS e
LEFT OUTER JOIN event_recurrences AS r ON (e.id = r.event_id)
ORDER BY r.date_from, e.date_from

问题是现在记录没有正确排序。 不重复的记录总是先排序。

您是否可以在不重复记录优先级的情况下帮助获取按升序排列的日期。

3 个答案:

答案 0 :(得分:2)

您可以使用此语法将NULL放在底部:

ORDER BY IF (ISNULL(my_field), 1, 0), my_field;

其他数据库系统类似于NULLS LAST / NULLS FIRST

答案 1 :(得分:1)

执行类似

的操作
ORDER BY least(r.date_from, e.date_from)

ORDER BY greatest(r.date_from, e.date_from)

我不知道这是不是你需要的,但它会给你一个想法......

答案 2 :(得分:0)

问题是你加入了事件然后重新发生它们,如果它们没有再次发生,那么不会再次发生不再发生的事件,因为你已经说过首先按重新发生的事件排序,如果它没有将为NULL,NULL小于一切。

只有这样,我才能看到你得到你想要的答案:

select * from e union 
select (r.event_id as id, e.event, t.date_from from r 
   left join e on r.event_id=e.id) 
order by date_from

应将表连接到一个长列表并按日期排序