为了账号安全,请及时绑定邮箱和手机立即绑定

数据库 表设计

数据库 表设计

PHP
墨色风雨 2018-08-18 20:35:47
a b c d 4个人a将任务转办给b.b将任务转办给c.c将任务转办给d....a 看到的记录. a->b->c->d.....数据表应该如何设计呢?
查看完整描述

2 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

因为MySQL 不太支持存储有顺序的列表类型, 当然如果把任务队列a->b->c->d看成字符串另说。
有没有考虑过给任务额外增加一些属性,比如计数,时间戳等。因为任务本身应该有一定时效性。

没理解错的话,其实就是当某一个用户开始接手这个任务之后,后续任务对其可见

比如一项任务执行顺序是a-b-c-d-b,那可以有:

user task order
a    task1   0
b    task1   1
c    task1   2
d    task1   3
b    task1   4
b    task2   0
d    task2   1
...  ...     ...

比如要查询b的记录,那么就是b接手之后的所有任务都是对b可见的
SQL查询可以是:其中table1 就是存储上述数据的一个表。子查询得到的结果就是找到该用户最早接手的任务对应的序号,这里是2

SELECT table1.user FROM table1 
WHERE table1.order >= 
    (SELECT table1.order 
     FROM table1 
     WHERE table1.user = 'a'     AND table1.task = 'task1' 
     ORDER BY table1.order 
     LIMIT 1) 
AND table1.task = 'task1'ORDER BY table1.order;

最后得到有顺序的b->c->d->b


查看完整回答
反对 回复 2018-08-19
?
慕神8447489

TA贡献1780条经验 获得超1个赞

可以建个1对多关系的两张表啊,任务表(task_id,..)和任务转办表(id, task_id, user_id, parent_id, next_id,..),parent_id为0的就是第一个接手记录,next_id为0的就是最后个接手的记录。查这个任务的所有关系链按照id升序就是了。查指定人的下级关系链找转办表主键id大于这个人所在记录的主键id的就行了。

查看完整回答
反对 回复 2018-08-19
  • 2 回答
  • 0 关注
  • 658 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信