我有一个数据库,其中包含多个表,这些表包含有关我们已部署到各种环境中的包的信息。然后查询该数据库以给出已安装软件的最新版本的总体图片,该图片显示在网页上的表格中。
我正在尝试做并且正在努力的是获取每个环境中安装的每个软件包的最新版本。我开始使用这篇文章中的信息:
这对软件的另一个方面有很大帮助,但我失败的地方是因为我有多个选择标准。数据库相关部分如下
包版本表
package_versions
id
server_name_id
package_name_id
version
包名表
package_names
id
name
服务器名称表
server_names
id
name
environment_name_id
最后是环境名称表
environment_names
id
name
这种结构允许我保存部署到各种环境中的包和版本的历史记录。
现在我需要做的是获取每个环境中部署的所有包的最新版本。正如我所说,当我使用一张桌子和两个标准时,我已经成功地使用了上面帖子中的解决方案,但这里是 4 张桌子和 2 个标准。
我的尝试要么将已安装在环境中的每个版本都还给我:
SELECT environment_names.name as environment,
package_names.display as package,
package_names.name as pkg_name,
package_versions.version as package_version
FROM package_versions INNER JOIN package_names ON package_names.id = package_versions.package_name_id
INNER JOIN server_names ON server_names.id = package_versions.server_name_id
INNER JOIN environment_names ON environment_names.id = server_names.environment_name_id
LEFT JOIN package_versions pv ON (package_versions.package_name_id = pv.package_name_id
AND package_versions.id < pv.id)
AND pv.id IS NULL
ORDER BY environment_names.name, package_names.name
不能只在版本号上使用 Max,因为它是由 Maven 生成的,因此它的格式为 xxx 并且可以包含 SNAPSHOT。
其他尝试只是为我提供了安装在任何地方的最新版本。
我想我需要在左连接部分添加一些东西,但我真的很难弄清楚什么。任何帮助都将不胜感激。
非常感谢,
罗素