Я пытаюсь внедрить систему контроля версий (СОП), в которой эти документы регулярно пересматриваются и отслеживают, читали ли пользователи самую последнюю версию СОП.
Я могу перечислить все СОП, где пользователь прочитал самую последнюю версию, но я не могу перечислить все СОП, которые, например, устарели, например. для уведомлений, что они должны прочитать их.
Таблица 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, но прочитал только v2 AAA, хотя v3 доступен.
Мне удалось выполнить запрос, который отображает только самые последние СОП на основе его кода, например, сверху 3, ааа, 3 | 4, BBB, 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 таблицы, я изо всех сил пытаюсь понять это !