我使用1-Wire溫度傳感器和名爲「LogTemp」的Windows應用程序記錄溫度值。MySQL使用可變列名創建視圖
此應用程序會自動將溫度值存儲在MySQL數據庫中。
這是溫度日誌數據庫:
mysql> show columns from logtemp;
+------------------+----------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+----------+------+-----+---------------------+-------+
| DATETIME | datetime | NO | PRI | 0000-00-00 00:00:00 | |
| 0400080224D59710 | float | YES | | NULL | |
| CA00080224DDD010 | float | YES | | NULL | |
| 5600080224E7FE10 | float | YES | | NULL | |
| 0500080224D40B10 | float | YES | | NULL | |
+------------------+----------+------+-----+---------------------+-------+
內容如下所示:
mysql> select * from logtemp limit 10;
+---------------------+------------------+------------------+------------------+------------------+
| DATETIME | 0400080224D59710 | CA00080224DDD010 | 5600080224E7FE10 | 0500080224D40B10 |
+---------------------+------------------+------------------+------------------+------------------+
| 2013-11-01 12:58:01 | 25.75 | 24.19 | 24.31 | 24.44 |
| 2013-11-01 12:59:03 | 25.81 | 24.19 | 24.31 | 24.44 |
| 2013-11-01 13:00:05 | 25.94 | 24.25 | 24.38 | 24.44 |
| 2013-11-01 13:01:07 | 25.94 | 24.25 | 24.38 | 24.44 |
| 2013-11-01 13:02:08 | 25.94 | 24.31 | 24.38 | 24.5 |
| 2013-11-01 13:03:10 | 26.06 | 24.31 | 24.38 | 24.5 |
| 2013-11-01 13:04:11 | 26.19 | 24.31 | 24.44 | 24.56 |
| 2013-11-01 13:05:13 | 26.31 | 24.31 | 24.44 | 24.56 |
| 2013-11-01 13:06:14 | 26.38 | 24.31 | 24.44 | 24.56 |
| 2013-11-01 13:07:16 | 26.38 | 24.31 | 24.44 | 24.56 |
+---------------------+------------------+------------------+------------------+------------------+
的列名(0400080224D59710等)是溫度傳感器的獨特的ID ROM 。當連接一個新傳感器時,數據庫中的附加列正在創建 - 將傳感器的ROM ID作爲列名稱。現在
,我添加另一個表看起來像這樣:
mysql> show columns from sensoren;
+--------------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------------+--------------+------+-----+---------+-------+
| strSensorHex | varchar(16) | NO | PRI | NULL | |
| strSensorBeschreibung | varchar(100) | NO | MUL | NULL | |
| strSensorRRDTabellenName | varchar(25) | NO | | NULL | |
+--------------------------+--------------+------+-----+---------+-------+
該表的內容是:
mysql> select * from sensoren;
+------------------+-----------------------+--------------------------+
| strSensorHex | strSensorBeschreibung | strSensorRRDTabellenName |
+------------------+-----------------------+--------------------------+
| 0400080224D59710 | Testsensor 1 | TEST1 |
| CA00080224DDD010 | Testsensor 2 | TEST2 |
| 5600080224E7FE10 | Testsensor 3 | TEST3 |
| 0500080224D40B10 | Testsensor 4 | TEST4 |
+------------------+-----------------------+--------------------------+
的strSensorHex
列包含溫度傳感器的獨特的ID ROM。
現在我想創建一個包含以下信息的新觀點:
DATETIME, strSensorHex, strSensorBeschreibung, Temperatur value
我想已經到谷歌的信息,有關如何實現這一點,但我無法找到一個答案了,我不是很熟悉SQL語法:-(
這是一個糟糕的數據庫設計。變量數據應該存儲在**表中,而不是存儲在列名中。你錯誤的設計是爲什麼你不能創建一個視圖來顯示它。 – Barmar
我同意Barman的評論,但在我看來,似乎並沒有可能改變這個程序在生成表格的行爲方式,至少從它的網站上可以判斷出來。 – Cynical
不幸的是,無法更改數據庫設計。它在LogTemp應用程序中被硬編碼。 – Piet