Einzelnen Beitrag anzeigen
  #5  
Alt 12.11.2012, 13:08:07
Tikiwiki Tikiwiki ist offline
Anfänger
 
Registriert seit: Apr 2005
Beiträge: 115
AW: vergleichen und bei Bedarf Array erweitern

Hallo meikel,

danke nochmals, dass Du Dich meines Problems annimmst. Ich möchte mich aber auch entschuldigen, für die anscheinend lückenhaften Informationen.
Da Dein letzter Beitrag für mich mittlerweile wie ein spanischen Dorf klingt (liegt nicht an Dir), da ich mich gedanklich an die Sensoren, Arrays und foreach-Schleifen verstricke. Darum kann ich nicht mehr beurteilen, ob Dein Vorschlag schon die Lösung wäre. Ich möchte da meine Erklärungen meines Problems erweitern, da ich nicht möchte, Deine Zeit unnötig in Anspruch zu nehmen und Du nur von Vermutung ausgehst.

So und jetzt gehts los:
1. Sinn dieser Fragestellung ist eine Tabelle die die Zeitintervalle, Sensoren, Messwerte übersichtlich darstellt. Eigentlich nichts anderes als eine Art Sitzplatzreservierung.
Es gibt Reihen (sprich das wären die einzelnen Messintervalle) und es gibt Spalten (sprich dies wären die einzelnen Sensoren) und die einzelnen Sitzplätze wären dann die Messwerte.

Die Daten stehen in einer Datenbank mit folgenden Aufbau:
Tabelle "Sensoren" -> sensorid, sensorname, f_messeinheit, etc.
Tabelle "Messwert" -> zeitstempel, f_sensorid, messwert

2. Die CSV-Datei wird tageweise geschickt und hat ca. 1000-2000 Zeilen). Es kommen in die Datenbank nur Werte die auch in der CSV-Datei vorliegen.

Jetzt hätte ich einen anderen Weg eingeschlagen um die Array-Problematik aussen vor zu lassen. Über die SELECT-Abfrage. Das wäre natürlich optimal.

Momentan verwende ich folgende Abfrage (diese liefert alle DS in bestimmten Zeitraum ohne Berücksichtigung, dass ein Sensor zum jeweiligen Zeitstempel fehlt

PHP-Code:
SELECT zeitstempelsensor.langbezeichnungsensor.sensornamesensor.sensoridsensor.messsignalmesswertidmesswertmessbereich_minmessbereich_maxeinheit
FROM messwert
JOIN sensor ON sensorid 
f_sensorid
WHERE 
(zeitstempel BETWEEN '$startdatum' AND '$enddatum')
AND 
f_messeinheitid '1'
ORDER BY zeitstempelsensorid ASC 
Jetzt wäre es eine tolle Sache das er als Ergebnis zusätzlich auch die NULL-Werte ausgeben könnte. Sprich zum Zeitstempel und Sensor = messwert-->NULL

Sollte dann in etwa so aussehen (gekürzt und vereinfacht).
2012-10-20 15:34:20 | Sensor1 | 1 | 7.38
2012-10-20 15:34:20 | Sensor2 | 2 | 13.79
2012-10-20 15:34:20 | Sensor3 | 5 | NULL
2012-10-20 15:34:20 | Sensor4 | 6 | 130.56
usw.

Anmerkung: Der Sensor3 gibt es zwar in der Tabelle "Sensor" aber kein Eintrag in Tabelle "Messwert".

Wäre dies möglich? Auch wenn dafür das Datenbankdesign geändert werden muss ist dies auch kein Problem.

Mein kläglicher Versuch (ist murks aber ich bekomme schon mal eine richtige Anzahl an DS)
PHP-Code:
SELECT f_sensoridsensornamemesswertzeitstempel FROM `sensor`
RIGHT JOIN messwert ON f_sensorid <= sensorid
WHERE 
(zeitstempel BETWEEN '$startdatum' AND '$enddatum') AND f_messeinheitid 
group by f_sensorid
zeitstempel
order by zeitstempel
f_sensorid ASC 
Ich hoffe, dass mein Beitrag für Euch verständlich war und es zu einer Lösungsfindung beträgt.

lg
Dietmar
Mit Zitat antworten