phpbar.de logo

Mailinglisten-Archive

Sortierung

Sortierung

Sebastian Tobias Mendel genannt Mendelsohn lists at sebastianmendel.de
Mon Dez 8 11:58:22 CET 2003


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