活动表,日期存储及查询怎么设计

2023-08-23 23:36:50 +08:00
 sunzy

活动的时间有几种形式:

  1. 年月日 2023/8/1 - 2023/8/15
  2. 月日 8/1 - 8/15
  3. 月份 3,4,8,9

要通过日期来查询和排序,如果只是日期查询还好一些,可以用一个日期->活动的索引表来解决,关键还有其他字段的查询。。。

1434 次点击
所在节点    MySQL
10 条回复
xuelang
2023-08-24 07:50:26 +08:00
将开始日期和结束日期作为单独的字段存储。

```
CREATE TABLE activities (
id SERIAL PRIMARY KEY,
start_date DATE,
end_date DATE,
-- 其他字段
);
```

查询和排序:
SELECT * FROM activities
WHERE start_date >= '2023-08-01' AND end_date <= '2023-08-15'
ORDER BY start_date;
sunzy
2023-08-24 10:01:16 +08:00
@xuelang 感谢回答,这种只能满足第一种形式
kongkx
2023-08-24 10:34:50 +08:00
参考一下 ical data model 。 这几种形式可以配合类型标记,进行 Humanize 展示
sunzy
2023-08-24 11:16:43 +08:00
@kongkx 多谢!我看看去~
xiaohundun
2023-08-24 11:23:59 +08:00
把 yyyy-mm-dd 拆开都存下来呢
dode
2023-08-24 11:56:04 +08:00
日期数据库归一化
sunzy
2023-08-24 12:45:47 +08:00
@xiaohundun 跨年如何查询呢?
xiaohundun
2023-08-24 13:22:24 +08:00
时间拆为年月日之后,用 between and 确定各个部份的范围不就好了么,如果不是范围那就用字面量条件,不挺简单,难道我没理解你的意思?
sunzy
2023-08-24 15:14:12 +08:00
@xiaohundun 比如:12/1 - 2/1 这种可以用 between and ?
xiaohundun
2023-08-24 16:26:02 +08:00
@sunzy 2-12 可以用,12-2 用不了但可以确定区间吧?处理一下变成 IN 查询不就行了,伪 sql:
month in (12,1,2) and day = 1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/967794

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX