不确定要搜索什么,所以这可能是一个重复的问题。我有一个 mysql 数据库,其中有一个名为 software 的表。软件表由以下字段组成:
id (auto_increment)
computer_name
software_name
software_version
install_date
每次安装、升级或恢复到以前版本的软件时,都会在表中创建一个新条目。
我正在尝试使用 php 构建一个看起来像这样的表:
.---------------------------------------------------.
| | software x | software y | software z |
|---------------------------------------------------|
| computer a | ver 1.0 | | ver 1.2 |
|---------------------------------------------------|
| computer b | | ver 2.1 | |
|---------------------------------------------------|
| computer c | ver 1.3 | ver 1.1 | |
'---------------------------------------------------'
从这样的数据:
computer_name | software_name | software_version | install_date
----------------------------------------------------------------------
computer a | software x | ver 1.1 | [10 days ago]
computer a | software x | ver 1.0 | [2 days ago]
computer a | software z | ver 1.1 | [20 days ago]
computer a | software z | ver 1.2 | [5 days ago]
这install_date
将是一个实际日期,为方便起见,在 [X 天前] 中输入。
该表将显示每台计算机上安装的每个软件的最新版本,每个唯一的计算机条目只有一行,每个唯一的软件条目只有一列。
这可能与单个 MySQL 表有关吗?实现这一目标的最佳方法是什么?我正在将 PHP 和 MySQL 与 codeigniter 一起使用。
更新:
通过查看可能的重复问题,我能够准备此查询:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(software_name = ''',
software_name,
''', software_version, NULL)) AS ',
replace(software_name, ' ', '_')
)
) INTO @sql
FROM
software;
SET @sql = CONCAT('SELECT computer_name, ', @sql, ' FROM software GROUP BY computer_name');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
它以我正在寻找的格式生成结果,但是它不是通过最新版本获取版本,install_date
而是通过找到的最大版本号获取。如何修改上述内容以获取具有最新关联的版本install_date
?