我对我的数据库表结构有疑问。我想知道我是否走在正确的轨道上,或者我是否错过了一个好的选择。情况就是这样:
为了便于阅读,我没有粘贴全部内容,因为我的问题只是关于结构。
2张表:
1:id(AI),任务
2:id,name,task
表1显示了可由管理面板更改的动态复选框,因此内容将类似于此
1 task1
2任务2
5任务5
(缺少3& 4导致管理员删除了这些记录)。
表二中的人员应该从表1中完成任务。目标是显示未检查的任务。
所以表2的内容是:
1 Name1 1,5
2名称2 1,2
3 Name3 1,2,5
表2中的数字代表表1中的复选框。因此,通过查询,我可以将表2中的数字与表1中的id进行比较,并将缺少的ID显示为“todo”。
在我看来,这看起来非常过分,必须有一种更简单的方法来创建动态选项,可以比较和存储为待办事项。
欢迎提出建议!
答案 0 :(得分:0)
我建议你使用多对多关系的基本结构:
tasks users user_tasks
+----+-----------+ +----+-------+ +---------+---------+
| id | name | | id | name | | user_id | task_id |
+----+-----------+ +----+-------+ +---------+---------+
| 1 | Buy milk | | 1 | John | | 1 | 2 |
| 2 | Get drunk | | 2 | Tim | | 3 | 2 |
| 3 | Have fun | | 3 | Steve | | 2 | 4 |
| 4 | Go home | +----+-------+ | 3 | 4 |
+----+-----------+ +---------+---------+
您可以使用以下查询获取未分配的任务:
SELECT
tasks.*
FROM
tasks
LEFT JOIN
user_tasks
ON (tasks.id = user_tasks.task_id)
WHERE
user_tasks.user_id IS NULL
您还可以获取没有分配任务的用户:
SELECT
users.*
FROM
users
LEFT JOIN
user_tasks
ON (users.id = user_tasks.user_id)
WHERE
user_tasks.user_id IS NULL
希望这会对你有所帮助。