phpbar.de logo

Mailinglisten-Archive

Re: subquery-Problem mit MySQL
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: subquery-Problem mit MySQL



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


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive