mysql - 使用 MySQL 查询用户是否有与文档的最新版本匹配的日志
问题描述
我正在尝试实施一个版本控制系统 (SOP),在该系统中定期修订这些文档并跟踪用户是否阅读了最新版本的 SOP。
我可以列出用户已阅读最新版本的所有 SOP,但我无法列出所有过期的 SOP,例如通知他们需要阅读它们。
SOP 表可能包含多个,例如
SOP Index SOP Code SOP Version
1 AAA 1
2 AAA 2
3 AAA 3
4 BBB 1
5 CCC 1
6 CCC 2
SOP 日志如下所示:
SOP Index User ID SOP Version
1 1 1
2 1 2
4 1 1
所以这表明用户 1 已经阅读了最新版本的 BBB,但是虽然 v3 可用,但只阅读了 v2 的 AAA。
我已经设法运行了一个查询,该查询仅显示基于其代码的最新 SOP,例如从上面 3, AAA, 3 | 4、血脑屏障、1 | 6,CCC,2,但我正在努力解决如何将其与记录 SOP 索引、用户和版本号的单独表进行比较,并确定他们是否已阅读最新版本。
这将选择最近的 SOP:
SELECT a.sop_group, a.sop_code, a.sop_version, a.sop_title, a.sop_issued,
c.log_sop_version
FROM data_sops a
INNER JOIN (
SELECT sop_code, MAX(sop_version) sop_version, sop_index
FROM data_sops
GROUP BY sop_code) b ON a.sop_code = b.sop_code AND a.sop_version = b.sop_version
我已经设法扩展它以选择用户阅读过的最新版本的 SOP:
SELECT a.sop_group, a.sop_code, a.sop_version, a.sop_title, a.sop_issued, c.log_sop_version
FROM data_sops a
INNER JOIN (
SELECT sop_code, MAX(sop_version) sop_version, sop_index
FROM data_sops
GROUP BY sop_code) b ON a.sop_code = b.sop_code AND a.sop_version = b.sop_version
LEFT JOIN log_sops c ON a.sop_index = c.log_sop_sop_index
WHERE c.log_sop_user_index = '$userid' AND c.log_sop_version = a.sop_version
我认为该行WHERE c.log_sop_user_index = '$userid' AND c.log_sop_version = a.sop_version
可以将运算符从 = 更改为 <> 以产生相反的效果,但它似乎并不那么简单,并且需要 3 个表加入,我正在努力弄清楚!
解决方案
您的查询应该是这样来确定您的用户尚未阅读的版本。
select data_sops.sop_index,data_sops.sop_code,data_sops.sop_version
from data_sops
join (SELECT sop_code, MAX(sop_version) sop_version
FROM data_sops GROUP BY sop_code) a
on data_sops.sop_code = a.sop_code
and data_sops.sop_version = a.sop_version
where not exists
(select log_sop_sop_index from log_sops
where data_sops.sop_index = log_sop_sop_index
and log_sop_user_index = '$userid')
推荐阅读
- c# - Excel到datagridview:不向网格c#Web应用程序显示编号的单元格
- spring - 由 Hibernate 和通过脚本手动生成的主键的约束冲突
- php - 用php获取两个参数之间的所有子字符串
- javascript - Jquery 浏览 div
- regex - 垃圾邮件过滤器的正则表达式
- javascript - 使用 Javascript + Firebase 动态构建的图片库
- sockets - Docker在主机和容器之间建立tcp通信
- php - Api 平台:渴望加载子资源
- r - group_by 在因子列上的性能
- c# - 在 Visual Studio 2017 中调试时禁用内联自动