Einzelnen Beitrag anzeigen

Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

Array füllen mit Daten aus Datenbank (Join)

  Alt 11. Nov 2016, 22:22
Datenbank: - • Version: - • Zugriff über: -
Hallo zusammen,

ich habe folgende Datenbanktabellen, bei denen die Datensätze der Prozessdaten über die Kopf-ID mit der Kopfdaten-ID verknüpft sind:

Kopfdaten:
Code:
ID   Datum ...
1    12.11.16
2    13.11.16
Prozessdaten:
Code:
Kopf-ID   Name  Value
1         Kraft   10
1         Druck    2
1         Temp    22
2         Geschw. 110
Ich möchte diese Daten auslesen und eine Liste damit füllen:
Code:
class Data {
    public sting Name;
    public double Value;
}
Dictionary<int, List<Data>> result;
Gefüllt soll das so aussehen (Pseuso-Code):
Code:
[1] =>
    [
        Name = "Kraft"
        Value = 10
    ],
    [
        Name = "Druck"
        Value = 2
    ],
    [
        Name = "Temp"
        Value = 22
    ],
[2] =>
    [
        Name = "Geschw."
        Value = 110
    ],
Nun würde ich gerne wissen, wie man das am besten macht.
Folgende Möglichkeiten fallen mir ein (Pseudo-Code, achtet bitte nicht auf die Syntax o.ä. )

1. Mehrfache Datenbankabfragen, das sind jedoch u.U. sehr viele
Code:
headData = SELECT * FROM Kopfdaten;

foreach (sHeadData in headData) {
    id = sHeadData["ID"];
    values = SELECT * FROM Prozessdaten WHERE Kopf-ID = id;

    valuesParsed = new List<Data>();
    foreach (var sValue in values) {
        valuesParsed.Add(
            new Data() {
                Name = sData["Name"],
                Value = sData["Value"],
            }
        );
    }

    result.Add(id, valuesParsed);
}
2. Eine Abfrage mittels JOIN

Ich denke von der Abfrage her ist es deutlich schneller, aber die Logik für die Aufbereitung kommt mir eher umständlich vor.
Code:
data = SELECT * FROM Kopfdaten k
    INNER JOIN Prozessdaten p
        ON k.ID = p.Kopf-ID;

foreach (var sData in data) {
    id = sData["ID"];

    if (!result.ContainsKey(id)) {
        result.Add(id, new List<Data>());
    }

    result[id].Add(
        new Data() {
            Name = sData["Name"],
            Value = sData["Value"],
        }
    );
}
Ich hoffe, ihr könnt nachvollziehen worum es mir geht und mit idealerweise nennen, wie man das am besten umsetzt. 2 verknpüfte Tabellen hat man ja meist irgendwo und so außergewöhnlich ist die Aufgabenstellung daher nicht, denke ich.

Wie macht ihr sowas?

Grüße
Matze

Geändert von Matze (11. Nov 2016 um 22:25 Uhr)
  Mit Zitat antworten Zitat