Mailinglisten-Archive |
Rudolf Koch schrieb: > Jein, ich muss jeweils nur für jeden User einzeln Daten, abfragen, das > Problem ist aber, daß ich nicht weiß, was schneller und effektiver von den > oben genannten Möglichkeiten ist. Wenn ich für jeden User eine eigene > Tabelle habe, müsste ich nur auf die zugreifen. Wenn ich alle in einer > Tabelle habe, weiß ich ob es sehr viel langsammer wird, wenn er alle User > überprüft, wer denn jetzt so heißt. Um Gottes Willen, so funktioniert das nicht. Du hast ja einen primary-key auf die User-ID. Der Zugriff über einen Key ist im Vergleich zum gesamten Durchsuchen einer Tabelle superschnell. Die Zugriffszeit ist durch log(n) begrenzt (Basis 2, n ist die Anzahl der Datensätze). Um eine Tabelle mit 100.000 Datensätzen zu durchsuchen sind also nicht maximale (worst case) 100.000 Schritte sondern max. 17 Schritte nötig. Das ist hyperschnell und schneller, als wenn Du mit untenstehender Lösung eine while-Schleife bastelst. > Die Datei wird so aufgerufen: > http://localhost/projects/counter/counter?user=Klaus > Wenn ich dann eine Tabelle hab, muss er den User Klaus suchen, wenn ich > viele Tabelle habe ruft er die Tabelle Klaus_data auf und holt sich die > Werte. Da ich vermute, daß die zweite Lösung besser ist brauche ich eine > Möglichkeit um alle Zeilen einer SPALTE auszulesen. Also so z.b.: > > Name - Value > User - Klaus > Password - xyz > > Ich kann aber nicht alle Daten in dieser Tabelle in einer Zeile nehmen, weil > ich auch den Namen manchmal verändern muss und die Tabelle um Felder > erweitern. Deshalb war das mit einer Tabelle nur eine Notlösung. > > Also benötige ich den genannten Befehl. Den gibt es nicht. Die Verarbeitung funktioniert immer zeilenweise. Wenn Du also ein komplette Spalte haben willst, mußt Du Dir alle Zeilen holen und darüber mit einer while($rec=mysql_fetch_array(...)) { ... } Schleife drüber gehen was definitiv langsamer ist als die "Ein-Tabellen-Lösung". (Du kannst auch mit mysql_result in eine bestimmte Zeile/Spalte springen, diese Lösung halte ich aber für noch schlechter). Es gibt wirklich nur zwei vernünftige Möglichkeiten (untested): create table userdata ( user varchar(20) not null primary key, passwd varchar(20), name ..., vorname ..., ... ) oder create table userdata ( user varchar(20) not null primary key, parameter varchar(20) not null primary key, value varchar(200) ) Im zweiten Fall ist das Auftauchen neuer Parameter völlig unproblematisch, Du brauchst keine Änderungen an der Tabelle vorzunehmen und auch der erste Fall ist mit einem gepflegten "alter table add column ..." in den Griff zu bekommen. Und nochmal : Für jeden Benutzer eine eigene Tabelle anlegen ist aufwendig, vor allem, wenn an den Tabellen nachträglich Änderungen vorgenommen werden sollen. Und nehmen wir mal an Du hast ein Feld "Nachname" in Deiner User-Tabelle und möchtest nun rausfinden welche Deiner Benutzer "Müller" heißen. Wie willst Du eine solche Abfrage mit deinen x-Tabellen realisieren ? Der Zugriff ist ja nur über den Usernamen möglich, alle anderen Abfragen sind unmöglich (ok, es gibt extrem aufwendige Möglichkeiten ...) Gruss Alex (!=Axel)
php::bar PHP Wiki - Listenarchive