Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

View mit Spaltennamen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von piet61, 1 November 2013.

  1. piet61

    piet61 Neuer Benutzer

    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: 1 November 2013
  2. akretschmer

    akretschmer Datenbank-Guru

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

    Wozu dient die?

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


    Ja. es gleich richtig speichern.
     
  3. ukulele

    ukulele Datenbank-Guru

    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.
     
  4. piet61

    piet61 Neuer Benutzer

    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
     
  5. ukulele

    ukulele Datenbank-Guru

    Eventuell nicht '0400080224D59710' sondern "0400080224D59710". Teste doch mal ein einzelnes Select daraus.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    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.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden