Hallo zusammen,
Ich hoffe mal einen passenden Titel gefunden zu haben, auch wenn diese etwas lang geworden ist!
Ich habe eine ähnliche Tabelle wie diese:
Ähnlich heißt in diesem Fall, dass die Felder anders heißen und weitere Felder in der Tabelle existieren, welche jedoch für dieses Beispiel uninteressant sind. In dieser Tabelle speicher ich Datensätze in unterschiedlichen Gruppen mit dem Timestamp des Zeitpunktes des Erstellens ab, welcher als Sortierkriterium dient!
Nun möchte ich einen bestimmten Datensatz zusammen mit dem zeitlichen Vorgänger und dem Nachfolger in möglichst einer Abfrage erhalten. Früher hatte ich ein ähnliches Problem schon einmal, jedoch war das Sortierkriterium dort eine vorlaufende Nummer, sodass der Vorgänger durch +1 und der Nachfolger durch -1 ausgewählt werden konnte. In diesem Fall ist der Zeitpunkt des Vorgängers und des Nachfolgers jedoch nicht bekannt, sodass ich nicht weiß, wie ich diese Abfrage durchführen kann.
Habe ich nun zum Beispiel folgende Datensätze in der DB
und möchte einen Datensatz samt Nachfolger und Vorgänger ermitteln, führe ich zur Zeit drei Abfragen nacheinander aus:
wobei $time und $group von dem Datensatz der ersten Abfrage stammen!
Sobald ich nun eine Liste von N Datensätzen eine Gruppe abfragen möchte, benötige ich 2*N + 1 Abfragen für Vorgänger und Nachfolger, was etwas viel ist, wenn ich das womöglich in einer Abfrage erhalten könnte!
Gibt es eine Möglichkeit dies mit einer Abfrage durchzuführen oder benötige ich dafür zwingend ein Sortierkriterium, wo das des Vorgängers und das Nachfolgers bekannt ist?
Vielen Dank und ich hoffe meine Frage/mein Problem ist verständlich?
Grüße, Sirke
Ich hoffe mal einen passenden Titel gefunden zu haben, auch wenn diese etwas lang geworden ist!

Ich habe eine ähnliche Tabelle wie diese:
Code:
CREATE TABLE `data` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , `group` INT UNSIGNED NOT NULL , `time` TIMESTAMP NOT NULL );
Nun möchte ich einen bestimmten Datensatz zusammen mit dem zeitlichen Vorgänger und dem Nachfolger in möglichst einer Abfrage erhalten. Früher hatte ich ein ähnliches Problem schon einmal, jedoch war das Sortierkriterium dort eine vorlaufende Nummer, sodass der Vorgänger durch +1 und der Nachfolger durch -1 ausgewählt werden konnte. In diesem Fall ist der Zeitpunkt des Vorgängers und des Nachfolgers jedoch nicht bekannt, sodass ich nicht weiß, wie ich diese Abfrage durchführen kann.
Habe ich nun zum Beispiel folgende Datensätze in der DB
Code:
INSERT INTO `data` (`id`, `group`, `time`) VALUES (1, 1, '2010-01-01 01:23:00'), (2, 1, '2010-02-01 04:56:00'), (3, 1, '2010-03-01 07:23:00'), (4, 1, '2010-04-01 09:47:00'), (5, 1, '2010-04-03 02:01:00'), (6, 1, '2010-04-05 03:39:00');
Code:
SELECT * FROM data WHERE id=4; SELECT * FROM data WHERE time < $time AND group = $group time DESC LIMIT 1; SELECT * FROM data WHERE time > $time AND group = $group time ASC LIMIT 1;
Sobald ich nun eine Liste von N Datensätzen eine Gruppe abfragen möchte, benötige ich 2*N + 1 Abfragen für Vorgänger und Nachfolger, was etwas viel ist, wenn ich das womöglich in einer Abfrage erhalten könnte!
Gibt es eine Möglichkeit dies mit einer Abfrage durchzuführen oder benötige ich dafür zwingend ein Sortierkriterium, wo das des Vorgängers und das Nachfolgers bekannt ist?
Vielen Dank und ich hoffe meine Frage/mein Problem ist verständlich?
Grüße, Sirke
Kommentar