【发布时间】:2018-11-22 14:46:06
【问题描述】:
我想运行一个序列,范围为每个客户端,因此它们每个都有一系列从 1 开始的 ID:
Clients:
+----+-------+
| id | name |
+----+-------+
| 1 | Dave |
| 2 | Sarah |
+----+-------+
Tickets:
+----+-----------+----------+----------------------------+
| id | clientID | sequence | title |
+----+-----------+----------+----------------------------+
| 1 | 1 | 1 | Title 1 |
| 2 | 1 | 2 | Another title for Client 1 |
| 3 | 2 | 1 | Different Title |
+----+-----------+----------+----------------------------+
最好的方法是什么(在速度和数据完整性方面)?插入时我有这样的东西:
为戴夫添加新票
SELECT COALESCE( (MAX(sequence) + 1), 1) as nextSeq WHERE id = 1 FROM tickets
然后
INSERT INTO tickets (... sequence) VALUES (... nextSeq)
COALESCE 有什么用?
当记录在其系列中的第一个时,MAX() 将返回空,因此默认为 1。
为什么我需要一个用户范围的序列号?
这是一个文档捕获系统,显示大量表格数据,我有多个实体; System、Risk、Ticket、Process 和我正在使用带有标题的数字来帮助用户跟踪他们的记录。在表格中,初始结果将按此 ID 排序,因此我不想要全局 ID 编号。我将 auto_incremented 列留给其他后端操作、连接、私有引用等。
【问题讨论】:
-
你的 MySQL 服务器版本是多少?你能访问窗口/分析函数吗?
-
@MadhurBhaiya 5.7 所以我不这么认为