如何在mysql表中查找缺失的行(日期)?

Sal*_*lar 3 mysql gaps-and-islands

我尝试了几个这样的主题:如何使用SQL查找丢失的数据行?在这里,但我不能让它在我的情况下工作.

我有一个以postsMySQL 命名的表,我每天都会在其中保存用户日记.有时用户忘记写一天的帖子,我想让他们以后再提交.所以数据库结构如下:

date           userid
2011-10-01     1
2011-10-02     1
(missing)
2011-10-04     1
2011-10-05     1
(missing)
2011-10-07     1
Run Code Online (Sandbox Code Playgroud)

所以我想在这个缺失行表中向用户显示缺少日期的下拉列表,这样他就可以选择他想要提交帖子的日期.

我怎样才能做到这一点?谢谢.

Mik*_*ll' 5

查找缺少日期的最简单方法是使用日历表.我发布了代码来创建和填充PostgreSQL的日历表 ; 你应该能够毫无困难地适应它.

使用日历表,您的查询非常简单,易于理解.要查找2011年10月的缺失日期,您可以使用这些内容.(猜猜你的"帖子"表.)

select c.cal_date
from calendar c
left join posts p on (c.cal_date = p.date)
where p.date is null
  and c.cal_date between '2011-10-01' and '2011-10-31'
  and p.userid = 1
order by c.cal_date
Run Code Online (Sandbox Code Playgroud)