Mailinglisten-Archive |
René Thiel wrote: > Hallo, > > habe ein Sortierungsproblem mit: > > SELECT p.id, p.typ, u.name, p.timestamp > FROM tabelle2 p > LEFT JOIN tabelle1 u > ON p.id=u.id > GROUP BY p.timestamp, p.id, p.typ > > Obiges bringt schon alle gewünschten Daten, wobei "typ" kann "login" oder "logout" sein. > Jetzt will ich aber gleich unter "login" das zugehörige (nächst folgende, falls vorhanden) > "logout" der betroffenen "id" sehen. > Trotzdem soll die zeitliche Reihenfolge der Logins dargestellt werden. > > > Also nicht: > > 1 User1 07.12.2003, 01:28:38 Uhr login > 1 User1 07.12.2003, 01:29:30 Uhr logout > 2 User2 07.12.2003, 02:16:17 Uhr login > 3 User3 07.12.2003, 02:25:29 Uhr login > 2 User2 07.12.2003, 02:27:41 Uhr logout > 3 User3 07.12.2003, 02:27:45 Uhr logout > > > sondern: > > 1 User1 07.12.2003, 01:28:38 Uhr login > 1 User1 07.12.2003, 01:29:30 Uhr logout > 2 User2 07.12.2003, 02:16:17 Uhr login > 2 User2 07.12.2003, 02:27:41 Uhr logout > 3 User3 07.12.2003, 02:25:29 Uhr login > 3 User3 07.12.2003, 02:27:45 Uhr logout > > Ich hoffe, dafür nicht zwei selects ausführen zu müssen? nein aber die Struktur ist etwas ungünstig gewählt dafür, wie Norbert schon aufzeigte ... ... dem entsprechend ist die Abfrage auch recht 'kompliziert' (ich verwende mal `user` und `log` als Tabellennamen der Übersicht wegen) SELECT `user`.*, `login`.`timestamp` AS `logintime`, MIN(`logout`.`timestamp`) AS `logouttime` FROM `user` LEFT JOIN `log` AS `login` ON `user`.`id` = `login`.`id` AND `login`.`typ` = 'login' LEFT JOIN `log` AS `logout` ON `user`.`id` = `logout`.`id` AND `logout`.`typ` = 'logout' AND `login`.`timestamp` <= `logout`.`timestamp` GROUP BY `user`.`id`, `login`.`timestamp` ORDER BY `login`.`timestamp` oder so ähnlich, habs nicht probiert, musste mal selber machen .. das liefert dir zumindest einen user/login/logout in einer Zeile, den Rest kannst du mit deinem Programm machen, was natürlich mit deiner vorrigen Abfrage auch schon gegangen wäre ... wenn du es allerdings unbedingt in der von die beschrieben Form direkt als Ergebnis des Queries brauchst wird es noch komplizierter , aber es würde gehen! ... ein wenig CASE und CONCAT wäre da wohl nötig ... -- Sebastian Mendel (www.sebastianmendel.de) *www.warzonez.de* | www.tekkno4u.de | www.nofetish.com -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive