1

我有两个表“USERS”和“CALENDER”,在日历表用户中放置他的可用日期,表示一对多的关系。

现在我想按可用性日期获取用户列表(今天的日期意味着今天可用),即:我想在顶部显示今天可用的用户,然后显示未来可用的用户,然后显示那些没有的用户t 任何可用性(即:日历中没有记录)。

我正在尝试以下查询:

SELECT u.first_name, c.date
FROM  users AS u
LEFT JOIN calendar AS c ON (c.uid = u.id)
GROUP BY u.id
ORDER BY DATE(c.date) ASC

但这将首先记录那些在日历中没有任何可用性的用户,然后是那些有可用性但过去的用户。结果如下:

User1   NULL                                          User13    2012-12-12 00:00:00
User2   NULL                                          User12    2012-12-12 00:00:00
User3   NULL                                          User10    2012-12-23 00:00:00                      
User4   NULL                                          User10    2012-12-24 00:00:00
User5   NULL                                          User9     2012-12-25 00:00:00
User6   NULL                 - Want To look this =>   User8     2012-12-27 00:00:00
User7   2012-09-20 00:00:00                           User7     2012-12-28 00:00:00
User8   2012-09-29 00:00:00                           User1     NUL
User9   2012-10-25 00:00:00                           User2     NUL
User10  2012-10-26 00:00:00                           User3     NUL
User11  2012-10-27 00:00:00                           User4     NUL
User12  2012-12-05 00:00:00                           User5     NUL
User13  2012-12-10 00:00:00                           User6     NUL
4

4 回答 4

1

修改你的ORDER BY条款

ORDER BY IF(DATE(c.date) IS NULL, 1, 0), DATE(c.date)
于 2012-12-12T07:28:48.630 回答
1

没有考虑这么多,您是否尝试过使用

... ORDER BY DATE(c.date) DESC

它将排序DESC结尾,而不是您的显式(和默认)ASC结尾。

于 2012-12-12T07:29:02.573 回答
0

这个问题可以通过放置子查询并获取未来日期然后以升序形式显示与问题完全相同,即:所有可用日期记录在顶部然后一些未来记录然后显示空值(如果有人没有日历中的日期)。

SELECT u.first_name, 
 (
  SELECT DATE( c.date ) FROM calendar AS c
  WHERE c.uid = u.id
  AND DATE( c.date ) >= CURDATE( )
  ORDER BY DATE( c.date ) ASC
  LIMIT 1
) AS availability
FROM users AS u
GROUP BY u.id
ORDER BY IF( availability IS NULL , 1, 0 ) , availability
于 2012-12-12T08:12:46.587 回答
0

使用 IF 函数将您的空值映射到将根据您的需要进行排序的其他内容,例如过去的日期,或者如果适合您,甚至可以是字符串。

http://www.java2s.com/Code/SQL/Function/MappingNULLValuestoOtherValuesforDisplay.htm

于 2012-12-12T07:36:54.737 回答