来自两个表的MySql复杂查询

标签 mysql sql select join

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

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

我正在尝试以下查询:

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

最佳答案

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

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

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

关于来自两个表的MySql复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13834825/

相关文章:

MySQL检查值是否存在不止一次

mysql - 使用 txt 文件加载数据 INFILE

mysql - 如何使用两个不同的 id 从不同的表中选择多个列?

MySQL SELECT 最适合记录基于可选的 NULL 值

mysql - 增加 MYSQL 列的大小总是透明的吗?

c# - 值设置正确但在使用时为空

mysql - 如何根据当前日期和 MySQL 中生成的序列号插入一个值?

mysql - 检查数据库行之一中是否存在值

css - 我想在选择框中垂直对齐文本

python - MySQL 选择产品的所有组件