【发布时间】:2018-10-29 21:06:29
【问题描述】:
我正在处理一个任务队列项目,我的组织中的几名员工将使用该项目。我们正处于测试阶段,大约有 10 个用户正在对其进行测试。
我有任务表。在此任务表中有 1000 多条记录。
任务表的结构是:
id task_details category_id status
为每个用户分配一个任务并保存在名为 user_tasks 的子表中。
user_tasks 表的结构是:
id task_id user_id status
users表的结构是:
id user_name Email status
一个任务不能同时分配给两个用户。但是,我间歇性地面临 1 个任务行分配给 user_tasks 表中的两个不同用户的问题。
我的查询是:
SELECT *
FROM tasks t
WHERE
t.status="Pending"
AND t.category_id=1
AND t.id NOT IN (SELECT task_id FROM user_tasks ut WHERE ut.task_id=t.id and ut.status='Inprogress')
LIMIT 1
如果查询返回一条记录,它会保存在 user_tasks 表中。
有人可以帮我找到并解决问题吗?
我正在使用 Mysql 和 Php
谢谢
【问题讨论】:
-
user_tasks中的task_id是否设置为UNIQUE?
-
问题很可能出在存储用户任务的代码中。您要么必须在插入之前手动检查新行不是重复行,要么在
user_tasks表中的task_id and user_id上设置唯一索引 -
我无法在
task_id和user_id上设置唯一索引,因为任务将在几天/几天后再次处于待处理状态,并且可能会分配给不同的用户。 -
@mickmackusa 也许当 SO 的问题提交协议发生根本性变化时 - 但我并不抱太大希望。