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 zeitstempel, sensor.langbezeichnung, sensor.sensorname, sensor.sensorid, sensor.messsignal, messwertid, messwert, messbereich_min, messbereich_max, einheit
FROM messwert
JOIN sensor ON sensorid = f_sensorid
WHERE (zeitstempel BETWEEN '$startdatum' AND '$enddatum')
AND f_messeinheitid = '1'
ORDER BY zeitstempel, sensorid 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_sensorid, sensorname, messwert, zeitstempel FROM `sensor`
RIGHT JOIN messwert ON f_sensorid <= sensorid
WHERE (zeitstempel BETWEEN '$startdatum' AND '$enddatum') AND f_messeinheitid = 1
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