View mit Spaltennamen

piet61

Neuer Benutzer
Beiträge
2
Hallo Forum,

bin leider kein SQL Spezialist und habe mir schon die Finger wundgesucht - aber leider bisher nichts passendes gefunden.

Hier nun mein Problem:
Ich messe Temperaturen von mehreren 1-Wire Sensoren mittels der Anwendung 'LogTemp', die mir die Messwerte automatisch in eine MySQL Datenbank schreibt.
Der Aufbau der LogTemp Datenbank ist wie folgt:
upload_2013-11-1_16-45-50.png
Die kryptischen Spaltennamen (04000...) sind die ROM IDs der einzelnen 1-Wire Sensoren. Inhalt dieser Spalten sind die jeweiligen Messwerte. Diese Spalten könnten sich Ändern bzw es können weitere Sensoren hinzukommen - wodurch dann weitere Spalten angelegt würden.

Der Inhalt dieser Tabelle sieht folgendermaßen aus:
upload_2013-11-1_16-53-1.png


Ich habe nun eine zweite Tabelle mit folgender Struktur angelegt:
upload_2013-11-1_16-48-57.png

in der Spalte 'strSensorHex' befindet sich die ROM ID der Sensoren.

Nun möchte ich eine View mit folgendem Aufbau erstellen:
DATETIME, strSensorHex, Messwert des jeweiligen Sensors

Ergebnis wäre, dass ich pro Messung mehrere Einträge hätte - für jeden Sensor einen.

Ziel ist es, dass ich mir für einen bestimmten Sensor, dessen Beschreibung ich auswählen kann, die Messwerte für einen bestimmten Zeitpunkt ermitteln kann.

Hat jemand eine Idee, wie man so etwas realisieren könnte?

Danke schonmal für Eure Unterstützung.

Viele Grüße

Piet
 
Zuletzt bearbeitet:
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.028
Die kryptischen Spaltennamen (04000...) sind die ROM IDs der einzelnen 1-Wire Sensoren. Inhalt dieser Spalten sind die jeweiligen Messwerte. Diese Spalten könnten sich Ändern bzw es können weitere Sensoren hinzukommen - wodurch dann weitere Spalten angelegt würden.

Du gehst jetzt bitte den, der das programmiert hat, eine runterhauen.

Ich habe nun eine zweite Tabelle mit folgender Struktur angelegt:
Anhang anzeigen 251

Wozu dient die?

Nun möchte ich eine View mit folgendem Aufbau erstellen:
DATETIME, strSensorHex, Messwert des jeweiligen Sensors

Das wäre in etwa die korrekte Struktur zum speichern.


Hat jemand eine Idee, wie man so etwas realisieren könnte?

Ja. es gleich richtig speichern.
 

ukulele

Datenbank-Guru
Beiträge
4.394
Für eine View würde ich zunächst mal den einfachen Weg gehen und für jeden Sensor einen Select schreiben:

Code:
SELECT    [DATETIME],
        '0400' AS strSensorHex,
        [0400] AS Messwert
FROM    digitemp.logtemp
WHERE    [0400] IS NOT NULL
UNION ALL
SELECT    [DATETIME],
        'CA00' AS strSensorHex,
        [CA00] AS Messwert
FROM    digitemp.logtemp
WHERE    [CA00] IS NOT NULL
UNION ALL
...
So bekommst du eine vernünftige Datenstruktur, musst aber bei einem neuen Sensor eine weitere Abfrage anhängen. Es ginge auch dynamisch aber man hätte dann mit viel Aufwand ein Script was diese verkorkste Abfrage erzeugt, das macht es nicht besser.
 

piet61

Neuer Benutzer
Beiträge
2
Hallo ukulele,
vielen Dank für Deinen Vorschlag. Leider funktioniert der nicht...

Habe das SELECT Statement folgendermaßen erweitert:
Code:
SELECT    [DATETIME],
        '0400080224D59710' AS strSensorHex,
        [0400080224D59710] AS Messwert
FROM    digitemp.logtemp
WHERE    [0400080224D59710] IS NOT NULL
UNION ALL
SELECT    [DATETIME],
        'CA00080224DDD010' AS strSensorHex,
        [CA00080224DDD010] AS Messwert
FROM    digitemp.logtemp
WHERE    [CA00080224DDD010] IS NOT NULL
UNION ALL
SELECT    [DATETIME],
        '5600080224E7FE10' AS strSensorHex,
        [5600080224E7FE10] AS Messwert
FROM    digitemp.logtemp
WHERE    [5600080224E7FE10] IS NOT NULL
UNION ALL
SELECT    [DATETIME],
        '0500080224D40B10' AS strSensorHex,
        [0500080224D40B10] AS Messwert
FROM    digitemp.logtemp
WHERE    [0500080224D40B10] IS NOT NULL;

Bekomme die Fehlermeldung:
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[DATETIME], '0400080224D59710' AS strSensorHex, [0400080224D5971' at line 1

Leider sagt diese Meldung nicht wirklich etwas aus.

Hat noch jemand eine Idee, wie man das ganze realisieren könnte?

Vielen Dank!

Piet
 

ukulele

Datenbank-Guru
Beiträge
4.394
Eventuell nicht '0400080224D59710' sondern "0400080224D59710". Teste doch mal ein einzelnes Select daraus.
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.028
Hat noch jemand eine Idee, wie man das ganze realisieren könnte?

Vielen Dank!

Piet

Bei @ukulele muß man halt aufpassen, der kommt von M$SQL ;-)

Du hast und suchst folgendes:

Code:
test=*> select * from piet61 ;
 zeitpunkt | v1 | v2 | v3
-----------+----+----+----
  1 | 10 | 12 | 14
  2 | 11 | 12 | 13
  3 | 12 | 14 | 15
  4 | 13 | 10 | 12
(4 rows)

test=*> select zeitpunkt, 'messpunkt 1' as messpunkt, v1 as messwert from piet61 union all select zeitpunkt, 'messpunkt 2', v2 from piet61 union all select zeitpunkt, 'messpunkt 3', v3 from piet61 order by 1,2;
 zeitpunkt |  messpunkt  | messwert
-----------+-------------+----------
  1 | messpunkt 1 |  10
  1 | messpunkt 2 |  12
  1 | messpunkt 3 |  14
  2 | messpunkt 1 |  11
  2 | messpunkt 2 |  12
  2 | messpunkt 3 |  13
  3 | messpunkt 1 |  12
  3 | messpunkt 2 |  14
  3 | messpunkt 3 |  15
  4 | messpunkt 1 |  13
  4 | messpunkt 2 |  10
  4 | messpunkt 3 |  12
(12 rows)

Achtung: das ist jetzt wieder PostgreSQL, Syntax sollte aber in MySQL ähnlich sein.
 
Oben