Ankündigung

Einklappen
Keine Ankündigung bisher.

Spaltenname übersetzen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Spaltenname übersetzen

    Hallo,
    ich habe folgende zwei Tabellen:

    Code:
    Tabelle 1:
    Time                | T_28_5C_FA_27_06_00_00_71 | ...
    --------------------+---------------------------+ ...
    2014-12-22 18:16:20 | 23.00                     | ...
    2014-12-22 18:16:30 | 23.10                     | ...
    ...
    
    Tabelle 2:
    Sensor                    | Title                 | ...
    --------------------------+-----------------------+ ...
    T_28_5C_FA_27_06_00_00_71 | Temperatur Wohnzimmer | ...
    In der ersten stehen also Temperatursensoren (Adressen) und die Werte zu bestimmten Zeiten und in der zweiten Tabelle stehen die Zuordnungen, welcher Sensor wo hängt.

    Jetzt möchte ich eine Abfrage haben, die ungefähr so aussieht:
    Code:
    Time                | Temperatur Wohnzimmer     | ...
    --------------------+---------------------------+ ...
    2014-12-22 18:16:20 | 23.00                     | ...
    2014-12-22 18:16:30 | 23.10                     | ...
    Geht das irgendwie? Ich will die Zuordnung nicht fest im Code machen, sondern über solche Zuordnungstabellen.

    Ich hatte überlegt, dass irgendwie mit JOIN zu machen, aber komme nicht wirklich auf einen grünen Zweig...
    Hat jemand ne Idee?

    Viele Grüße
    Tobias.

  • #2
    Zitat von Tobinator Beitrag anzeigen

    Ich hatte überlegt, dass irgendwie mit JOIN zu machen, aber komme nicht wirklich auf einen grünen Zweig...
    Hat jemand ne Idee?

    Viele Grüße
    Tobias.
    Ja.

    Vergiß es.

    Ich könnte dir evtl. was mit EXECUTE bauen, aber das ist nicht Sinn von SQL. Du solltest zwischen Spaltennamen und Spalteninhalten unterscheiden lernen.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      PHP-Code:
      SELECT
          T_28_5C_FA_27_06_00_00_71 
      AS 'Temperatur Wohnzimmer',
          
      T_28_5C_FA_27_07_00_00_72 AS 'Temperatur Küche',
          ...
      FROM
         Tabelle 1 
      Und den Query musste du ebend nur dynamisch erstellen. Das kannst du direkt in der Datenbank machen oder Clientseitig.

      PS: 1. Normalform... eigentlich würde man für jeden Sensor und Messung ein eigenen Datensatz speichern. (Time, Sensor, Wert) Das würde in dem Fall die Sache aber noch verkomplizieren.

      Kommentar


      • #4
        Zitat von erc Beitrag anzeigen
        PHP-Code:
        SELECT
            T_28_5C_FA_27_06_00_00_71 
        AS 'Temperatur Wohnzimmer',
            
        T_28_5C_FA_27_07_00_00_72 AS 'Temperatur Küche',
            ...
        FROM
           Tabelle 1 
        Genau das wollte er ja nicht.
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          Naja, so in der Art sollte das Ergebnis schon aussehen. Nur will ich das nicht so ausführlich in ein Query schreiben.
          @erc: Du meintest, es geht irgendwie Datenbankseitig. Kannst du kurz erklären wie genau? Und danke für den Tip mit erster Normalform, darüber werde ich auf jeden Fall mal nachdenken.

          Ich hab schon mal weiter gesucht: Kennt ihr euch mit Subquerys aus? Lohnt es sich da noch weiter zu suchen?

          Viele Grüße und einen guten Rutsch

          Kommentar


          • #6
            Hab gefunden
            Sofern die Fühler bekannt sind sollten sie ja sein

            Kann das ergebniss mit:
            `title`
            `time`
            `MeineTemp`
            ausgegeben werden

            Die Abfrage ist ziemlicher HickHack aber Funktioniert soweit
            Je nach anzahl der Sensoren muss der SELECT Angepasst werden

            Code:
            SELECT
            sensoren.title,
            temps.time,
            @t1:=IF(sensoren.sensor='T_28_5C_FA_27_06_00_00_70',temps.T_28_5C_FA_27_06_00_00_70,NULL),
            @t2:=IF(sensoren.sensor='T_28_5C_FA_27_06_00_00_71',temps.T_28_5C_FA_27_06_00_00_71,NULL),
            IF (@t1 IS NOT NULL, @t1, 
            IF (@t2 IS NOT NULL, @t2,NULL)
            ) AS MeineTemp
            
            FROM temps,sensoren
            ORDER BY title,`time`

            Kommentar


            • #7
              Zitat von Tobinator Beitrag anzeigen
              @erc: Du meintest, es geht irgendwie Datenbankseitig. Kannst du kurz erklären wie genau?
              Das ist Datenbankseitig aber recht "unschön". Vom Prinzip her sieht es so aus:

              PHP-Code:
              SET @fields null;
              SELECT 
                 
              @fields GROUP_CONCAT(CONCAT(Sensor,' AS \''Title ,'\',')) FROM sensoren
              //damit steht in @fields sowas wie T_28_5C_FA_27_06_00_00_71 AS 'Temperatur Wohnzimmer', T_28_5C_FA_27_07_00_00_72 AS 'Temperatur Küche', ...

              SET @sql CONCAT('SELECT time, ',@fields,' FROM messung');

              PREPARE stmt FROM @sql;
              EXECUTE stmt;
              DEALLOCATE PREPARE stmt

              Zitat von Tobinator Beitrag anzeigen
              Ich hab schon mal weiter gesucht: Kennt ihr euch mit Subquerys aus? Lohnt es sich da noch weiter zu suchen?
              Für das Problem? Da helfen dir Subqueries nicht weiter.

              Kommentar


              • #8
                Hi, sry, das ich mich solange nicht gemeldet habe, aber ich hatte Beruflich zu tun.
                Danke für eure Lösungsvorschläge, aber das sieht tatsächlich sehr unschön aus. Ich denke, ich werde mir dann doch eine clientseitige Lösung überlegen.

                Vielen Dank,
                Tobias.

                Kommentar

                Lädt...
                X