不知道要搜索什麼,所以這可能是一個重複的問題。我有一個名爲軟件的單一表的MySQL數據庫。該軟件表包括以下字段:來自MySQL的HTML表格,具有最新和唯一的值
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表?什麼是實現這一目標的最佳方式?我使用codeigniter使用PHP和MySQL。
更新:
從看可能重複的問題,我能夠準備這個查詢:
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
的版本?
本表中是否有任何一種主鍵字段(也許是自動增量)? – 2013-03-27 19:49:43
是的,有一個自動遞增的ID字段。更新問題... – codybuell 2013-03-27 19:52:50
如果安裝日期是一個unix時間戳,則不需要自動增量主鍵(即使我身體中的每個骨頭都告訴我應該有一個主鍵),並且您可以通過install_date降序進行排序。然而,設置一個主鍵和一個簡單的選擇不同應該工作... – 2013-03-27 20:02:02