der henry: gleichzeitiges lesen von unterschiedlichen Felder mit sql (mysql)

Hallo,

ich habe eine Datenbank, hier ein Auschnitt.

(Es handelt sich nur um ein Muster, die Datenmengen sind wesentlich größer)


#####################################
# maschine  |  varname  |  istwert  #
#===================================#
#    T1     |  drehzahl |    22     #
#-----------------------------------#
#    T1     |   temp    |    22     #
#-----------------------------------#
#    T2     |  drehzahl |    22     #
#-----------------------------------#
#    T2     |   temp    |    22     #
#-----------------------------------#
#    T3     |  drehzahl |    22     #
#-----------------------------------#
#    T3     |   temp    |    22     #
#-----------------------------------#

Gibt es eine SQL-Anweisung, um mit "einem Datenbankzugriff" die Istwerte von

T1-drehzahl, T2-temp, T3-drehzahl gleichzeitig zu lesen ??

 Gruß

der henry

  1. Hallo Henry,

    Gibt es eine SQL-Anweisung, um mit "einem Datenbankzugriff" die Istwerte von T1-drehzahl, T2-temp, T3-drehzahl gleichzeitig zu lesen ??

    ähm, meines Wissens nicht. SQL arbeitet datensatz-orientiert. Mit einer Abfrage kannst du die Menge der zutreffenden Datensätze eingrenzen, und das Ergebnis durch Aufzählung der Spalten im SELECT-Statement noch weiter eingrenzen. Aber nach einer Kombination aus verschiedenen Spalten selektieren? Eher nicht.

    Ergänzung: Mit einer wilden Kombination von AND-OR-Bedingungen mag das vielleicht doch möglich sein. Aber das wird dann sehr schwer handhabbar und ist vermutlich nur brauchbar, wenn die Kombination von Werten einmal handverlesen feststeht und sich nicht dynamisch ändert.

    Live long and pros healthy,
     Martin

    --
    Klein φ macht auch Mist.
  2. Hallo Henry,

    definiere "Ein DB Zugriff". Es soll sicherlich ein SQL Statement sein, klar, aber genügen 3 Rows? Oder muss es eine sein?

    Gehen tut es in beiden Fällen, die Lösung mit 3 Rows ist aber sicherlich effizienter.

    3 Rows: 3 SELECTs mit UNION ALL verbunden

    1 Row: Dreifacher Selfjoin

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Hi,

      Gehen tut es in beiden Fällen, die Lösung mit 3 Rows ist aber sicherlich effizienter.

      3 Rows: 3 SELECTs mit UNION ALL verbunden

      geht auch ohne UNION, einfach die 3 Bedingungen mit OR verknüpfen:

      SELECT * FROM table WHERE 
             (maschine = 'T1' AND varname = 'drehzahl') 
          OR (maschine = 'T2' AND varname = 'temp') 
          OR (maschine = 'T3' AND varname = 'drehzahl')
      ;
      

      oder

      SELECT * FROM table WHERE 
             (maschine IN ('T1','T3') AND varname = 'drehzahl') 
          OR (maschine = 'T2' AND varname = 'temp') 
      ;
      

      1 Row: Dreifacher Selfjoin

      oder

      SELECT 
          (SELECT istwert FROM table WHERE maschine = 'T1' AND varname = 'drehzahl') as T1Drehzahl, 
          (SELECT istwert FROM table WHERE maschine = 'T2' AND varname = 'temp') as T2Temp, 
          (SELECT istwert FROM table WHERE maschine = 'T3' AND varname = 'drehzahl') as T3Drehzahl
      ;
      

      cu,
      Andreas a/k/a MudGuard

    2. Servus Rolf,

      ich verstehe nicht ganz was Du meinst.

      Ja, es soll ein SQL Statement sein.

      Es können nicht nur

      Es werden nur eine Kombination aus "Maschine + Varname" benutzt, und in diesem Fall wird nur der Istwert gelesen. Jedoch können auch mal 300 Variablen (Zeilen) aus der Datenbank gelesen werden.

      Ich hoffe ich habe es richtig beantwortet.

       Gruß