1.1k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von
Hallo alle zusammen,

ich steh vor folgendem Problem:
Ich habe eine Tabelle mit Primary Key, Datensatz-ID, System-ID und einem Datum pro Zeile. Die Spalte System-IDs besagt, an welches System (jedes hat eine eindeutige ID) ein Datensatz geliefert wurde. Somit ist es auch möglich, dass ein Datensatz an mehrere Systeme verschickt wird.

Nun möchte ich gerne zählen, wie viele Datensätze in einem bestimmten Zeitraum an ein System geschickt wurde. Knackpunkt an der Sache ist, dass ich nicht die komplette Menge haben möchte (das wäre einfach mit Count), sondern nur jeweils den letzten Datensatz.

Beispiel:

ich habe den Datensatz 123 einmal an System 1, an System 2 und System 3 (in dieser Reihenfolge) verschickt. Es soll folglich nur die Lieferung an System 3 gezählt werden.

ist das irgendwie mit einer Abfrage in MySQL machbar oder muss ich dafür PHP bequemen (in einer schleife z.b.)?

Gruß
Daniel

3 Antworten

0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
SELECT t1.* FROM tabelle1 t1 WHERE t1.system_id= ( SELECT t2.system_id FROM tabelle2 t2 WHERE t1.datensatz_id= t2.datensatz_id ORDER BY t2.datum DESC LIMIT 1 );

Ungetestet natürlich. Klappt das nicht, bräuchte ich ein SHOW CREATE TABLE deine_tabelle von dir.
0 Punkte
Beantwortet von
Funktioniert leider nicht, da in der Haupttabelle für die Systeme keine Datensatz-IDs vorhanden sind :-(

Hier mal der Aufbau der Tabellen:


CREATE TABLE `users_systems` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

CREATE TABLE `users_systems_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`lead_id` int(11) NOT NULL,
`system_id` int(11) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=4417 ;


Die Tabelle users_systems beinhaltet die angelegten Systeme, die Tabelle users_systems_log alle Auslieferungen wie oben beschrieben
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Wo verwende ich zwei Tabellen? Namen sind Schall und Rauch:

SELECT t1.*
FROM users_systems_log t1
WHERE t1.system_id= (
SELECT t2.system_id
FROM users_systems_log t2
WHERE t1.id= t2.id
ORDER BY t2.datum DESC LIMIT 1
);
...