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

Abfragen automatisch in MySQL generieren oder mittels übergeordneter Anwendung erstellen?

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Papp Nase, 4 Mai 2014.

  1. Papp Nase

    Papp Nase Fleissiger Benutzer

    Ich habe hier einen schon etwas längeren Abfragecode.
    Es gibt bis jetzt drei Messgeräte und jedes Geraet hat zwei Messwerte.

    Code:
    DROP TABLE IF EXISTS excel_report1;
    CREATE TABLE excel_report1
    SELECT
      p1.zeit,
      p1.mw1  as mw1_1,
      p1.mw2  as mw1_2,
      p2.mw1  as mw2_1,
      p2.mw2  as mw2_2,
      p3.mw1  as mw3_1,
      p3.mw2  as mw3_2,
      p1.mw1-diff_p1.mw1 as d_mw1_1,
      p1.mw2-diff_p1.mw2 as d_mw1_2,
      p2.mw1-diff_p2.mw1 as d_mw2_1,
      p2.mw2-diff_p2.mw2 as d_mw2_2,
      p3.mw1-diff_p3.mw1 as d_mw3_1,
      p3.mw2-diff_p3.mw2 as d_mw3_2
    FROM messungen p1
      INNER JOIN messungen p2 on p1.zeit=p2.zeit
      INNER JOIN messungen p3 on p1.zeit=p3.zeit
      INNER JOIN messungen diff_p1 on diff_p1.zeit = p1.zeit-300
      INNER JOIN messungen diff_p2 on diff_p2.zeit = p2.zeit-300
      INNER JOIN messungen diff_p3 on diff_p3.zeit = p3.zeit-300
    WHERE
      p1.geraet  = 0 AND
      p2.geraet  = 1 AND
      p3.geraet  = 2 AND
      diff_p1.geraet = 0 AND
      diff_p2.geraet = 1 AND
      diff_p3.geraet = 2 AND
      p1.zeit>1395881400;
    In einer Tabelle geraete sind die Geraete definiert:
    GeraetID, Bezeichnung, Messwert1Bezeichnung, Messwert2Bezeichnung

    Kommen jetzt weitere Geräte hinzu, dann kann ich sie einfach in dieser Tabelle einfügen.
    Jetzt geht es mir darum, wie ich die MySQL-Abfrage generiere.

    Ich bin jetzt am Überlegen, wie ich die lange SQL-Abfrage automatisch erzeugen könnte.
    Wenn ich sie jetzt mit C erstellen würde, dann würde ich zunächst die Tabelle "geraete" einlesen. Mit Schleifenkonstruktionen könnten die dort gelesenen Werte in den Spalten mit Stringbefehlen erzeugen und dann den Abfragebefehl an den SQL-Server senden.

    Es ist aber bestimmt auch möglich, dass der MySQL-Server automatisch den langen Befehl erzeugt, in dem er die Tabelle "geraete" liest und dann damit den Report erzeugt. Was ist geschickter? Ist es überhaupt möglich, einen Namen, den ich mit AS setze - z.B.

    p1.mw1 as mw1_1

    dass der Name mw1_1 aus der Tabelle "geraete" gelesen wird?
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Du willst Zeilen zu Spalten machen, hab ich schon a paar mal erklärt, warum das keine gute Idee ist und wie es geht, z.B. hier: https://www.pg-forum.de/viewtopic.php?t=4067
     
  3. ukulele

    ukulele Datenbank-Guru

    Möglich ist das nur mit dynamischem SQL, was einem Zusammenpuzzeln gleich kommt. Du machst dir in jedem Fall viel, viel Arbeit und wirst mit Problemen zu kämpfen haben. Bei einer geringen Anzahl von Geräten würde ich es bei einer manuellen Anpassung belassen. Hast du eine hohe Anzahl an Geräten wirst du dir auch Gedanken über die Performance deines Konstruktes machen müssen.

    In jedem Fall würde ich dir Raten her dein Report Design zu überdenken.
     
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