Mailinglisten-Archive |
andreas amalesh kempf schrieb: > > On Wed, 2 Jun 1999 13:55:16 +0200, Thomas Eichholz wrote: > > >SELECT name,pw FROM user WHERE tabid IN (SELECT MIN(tabid) FROM user GROUP > >BY name); > > Mysql kann keine subselects. > > >was natuerlich mit Oracle nicht funktioniert. > > > >Ich moechte aber keine Datenbankspezifischen Befehle einsetzen. > > > >Hat jemand vielleicht eine Idee fuer eine systemunabhaengige > >Loesung des Problems. > > Keine subselects verwenden und wenn doch nötig und möglich, das > subselect zuerst ausführen und dann mit dem result jeweils ein > neues select absetzen. > > Falls es noch andere möglichkeiten (views, temporäre tabellen > etc.) gibt: Über weitere infos dazu bin ich auch neugierig :)) Eine temporäre Tabelle kann man natürlich immer verwenden, um das ganze bei mehreren gleichzeitigen Benutzern zu ermöglichen, sollte eine "Sessionid" verwendet werden. Ob und wie man z.B. duie Threadnummer vom Server auslesen kann weiß ich nicht, sollte aber in der Doku stehen. Die Abfrage SELECT name,pw FROM user WHERE tabid IN (SELECT MIN(tabid) FROM user GROUP BY name); kann folgendermaßen bearbeitet werden a) Es wird eine Hilfstabelle mit den Spalten tabid und sessionid angelegt b) für das folgende Nehme ich an, das SessionID=1 gewählt wurde c) DELETE FROM Hilfstabelle WHERE sessionid=1; d) INSERT INTO Hilfstabelle (SELECT MIN(tabid) as Tabis,1 as Sessionid FROM user GROUP BY name) e) SELECT name,pw FROM user,Hilfstabelle WHERE user.tabid=Hilfstabelle.tabid AND SessionID=1; f) DELETE FROM Hilfstabelle WHERE sessionid=1; Ob das so wirklich effizient ist bin ich mir allerdings nicht so sicher. Im Prinzip hatte sowas sogar Oracle mal für den TextServer verwendet, die Performanz hat das allerdings (bei den für den Test verwendeten Datenmengen) erheblich beeinträchtigt. Elmar
php::bar PHP Wiki - Listenarchive