gleichzeitiges lesen von unterschiedlichen Felder mit sql (mysql)
der henry
- sql
0 Der Martin0 Rolf B
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
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
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
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
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ß