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

Papp Nase

Aktiver Benutzer
Beiträge
48
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?
 
Werbung:
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.


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
 
Werbung:
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?
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.
 
Zurück
Oben