1
4
对于这样的应用程序,如果您使用的是PostgreSQL 9.2或更高版本,您可能需要尝试 range type 。以下是创建、加载和显示数据的示例:
id | user_id | avail ----+---------+----------------------------------------------------- 1 | 1 | ["2013-03-18 08:00:00-05","2013-03-18 17:00:00-05") 2 | 1 | ["2013-03-19 08:00:00-05","2013-03-19 17:00:00-05") 3 | 2 | ["2013-03-17 00:00:00-05","2013-03-24 00:00:00-05") 4 | 3 | ["2013-03-20 06:00:00-05","2013-03-20 18:00:00-05") (4 rows) 然后您可以使用各种运算符进行查询。如果您想要包含的所有可用性范围 任何 指定的查询范围中的一个:
或:
id | user_id | avail ----+---------+----------------------------------------------------- 3 | 2 | ["2013-03-17 00:00:00-05","2013-03-24 00:00:00-05") 4 | 3 | ["2013-03-20 06:00:00-05","2013-03-20 18:00:00-05") (2 rows) 如果您想要包含的所有可用性范围 全部的 指定查询范围的 在单个范围内 :
或:
id | user_id | avail ----+---------+----------------------------------------------------- 3 | 2 | ["2013-03-17 00:00:00-05","2013-03-24 00:00:00-05") (1 row) 如果您想要包含的所有可用性范围 任何 在指定的查询范围中, 但仅适用于具有以下可用性范围的用户 全部的 指定查询范围的 :
或(调整Clodoaldo-Neto的查询以使用范围):
您可以创建一个索引,以便在这样的大表上快速进行搜索:
笔记:
|
2
3
这利用了将布尔型转换为0或1的整数。
更改
|
Community wiki · SQL语法新手 1 年前 |
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |