gpt4 book ai didi

php - MySQL - 同一行分配给两个用户

转载 作者:行者123 更新时间:2023-11-29 16:46:48 25 4
gpt4 key购买 nike

我正在开发一个任务队列项目,该项目将由我组织中的多名员工使用。我们正处于测试阶段,大约有 10 个用户正在对其进行测试。

我有任务表。在此任务表中有 1000 多条记录。

任务表的结构是:

id  task_details category_id    status  

每个用户都被分配一个任务并保存在名为 user_tasks 的子表中。

user_tasks表的结构是:

id  task_id     user_id    status  

用户表的结构是:

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 表添加索引以避免重复。

ALTER TABLE `temp`.`user_tasks` 
ADD UNIQUE INDEX `uq_user_task` (`task_id` ASC, `user_id` ASC);

编辑

根据您的评论,即同一个表将用于将任务重新分配给其他用户,我将使用以下查询将记录插入到该表中...

INSERT INTO user_tasks (task_id, user_id, `status`)
SELECT id, :user_id, 'Inprogress'
FROM tasks t
WHERE NOT EXISTS (SELECT 1 FROM user_tasks WHERE task_id = t.id AND `status` = 'Inprogress')
AND t.category_id = 1 AND t.`status` = 'Pending'
LIMIT 1;

这将插入类别 1 且状态为待处理的任务,并且仅当没有打开的 user_task 记录(状态 = 'Inprogress')时才插入。

要进一步添加其他用户,您需要首先将“进行中”设置为“完成”或“已升级”或其他内容。

我还会添加一个日期列来跟踪状态分配给特定用户的时间。

关于php - MySQL - 同一行分配给两个用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53045429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com