Beitrag von fb (406 Beiträge) am Donnerstag, 8.November.2001, 12:20.
Sortierung mit deutschen Umlauten
Habe eine Datenbank mit begriffen und erläuterungen dazu. Die Datenbank wird sortiert nach Begriff ausgelesen und eine Indexreihe erstellt. Wenn der erste Buchstabe des Begriffs noch nicht vorgekommen ist, wird ein Link ausgegeben mit dem Anfangsbuchstabe. Das ganze sieht ca. so aus:
get "Begriff==*";
while(get_next) {
$first_char = substr($Begriff, 0, 1);
unless ($seen{$first_char}++) {
$index_reihe = $index_reihe."<a href='#$first_char'><b>$first_char</b></a> ";
}
}
Problem ist das z.B. Ü nach Z kommt und nicht nach U
eine Idee?
Steh gerade nen bischen aufm schlauch :-)
@Christoph ist das OK die Daten so zu durchlaufen (zum Thema Datenbank alles abfragen) oder gibts ne bessere Variante?
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Donnerstag, 8.November.2001, 16:06.
Re: Sortierung mit deutschen Umlauten
Na, auch wieder gut zuhause angekommen? War ja noch n langer Abend! ;-)
Alles durchlaufen: Kommt darauf an wie gross die DB ist. Wenns mehr als, sagen wir 500 Einträge sind, dann sollte man sich über was anderes Gedanken machen. Hier hängt dann wieder davon ab wieviele Begriffe es sind. Und ob die frei wählbar oder fest sind.
Im ersteren Fall: Üblich ist hier, ne eigene Begriffs-DB anlegen mit Verweisen von der Daten-DB auf diese (Relation ;-) )...
Im letzteren Fall: Warum nich einfach fest ins Template einbauen?
Zur Sortierung: Da musst Du selber sotieren, folgender Thread sollte weiterhelfen:
http://baseportal.de/cgi-bin/baseportal.pl?htx=/baseportal/forum&wcheck=1&Pos=3094.5
Antworten
Beitrag von fb (406 Beiträge) am Donnerstag, 8.November.2001, 18:05.
Re: Sortierung mit deutschen Umlauten
OK OK :-)
Ja wieder gut angekommen wenn auch im Stau gestanden.
"Lange Nacht" ja ja war ja im Training :-) Ich hoffe ich habe alle Deine Fragen zufriedenstellend beantwortet ;-))
Alles durchlaufen:
könnten schon mal mehr als 500 einträge werden.
Habe gedacht es ist eleganter die Datenbank einmal zu durchlaufen. Die Begriffe werden in einem Array auf das ein Hash(referenz) zeigt gespeichert und später ausgegeben um die Datenbank nur einmal aufzurufen, abzufragen.
Grund für das alles ist das die Indexreihe nur Buchstaben(Links) zeigen soll zu denen es auch Begriffe gibt.
Wenn ich das mit einer relation(sDB) realisiere muss ich doch für eine Geordnete und nach Buchstaben unterteilte Ausgabe,
1. 2 Datenbanken abfragen und
2. dieses für jeden Buchstaben wiederholen oder?
Fest ins Template einbauen? s.o. nur die Buchstaben für die es auch Begriff(e) gibt.
Nur noch mal ob ichs überhaupt verstanden habe (Relation):
Du meinst eine DB mit Begriffen und eine andere mit deren erklärung? oder eine mit Buchstaben und eine 2. mit Begriffen und Erklärung?
mmm Also ich nehme an ersteres weil dann nur die Begriffe geholt werden und nicht die langen Erklärungen -> sprich belastet den server weniger?
Zur Info: im moment Laufeit=0.01 bei 20 Einträgen
Sortierung bin ich drann gefällt mir aber so noch nicht, mal sehen vielleicht fällt mir noch was ein.
bis bald im Schnee juchee es wird Kälter fb
Antworten
Beitrag von Sander (8133 Beiträge) am Donnerstag, 8.November.2001, 18:40.
Re: Sortierung mit deutschen Umlauten
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Donnerstag, 8.November.2001, 19:37.
Re: Sortierung mit deutschen Umlauten
Fragen: Ach ja, mir is da noch was eingefallen... ;-)
Nee, also ab 500 Einträgen isses nich mehr so elegant, die komplette DB einzulesen ;-)
Machs doch so:
for $buchstabe ('A'..'Z')
{
get "Begriff~=$buchstabe range=0,1";
if($_amount>0)
{
$first_char = substr($Begriff, 0, 1);
$index_reihe = $index_reihe."<a href='#$first_char'><b>$first_char</b></a> ";
}
}
und vergleiche die laufzeit dieser version mal mit deiner alten version bei ner db mit 50/100/500/1000/10000 einträgen... ;-)
irgendwo schlägts um, ich würde sagen bei 50 ;-)
schnee: ja, freu mich schon!!!! ;-)
Antworten
Beitrag von fb (406 Beiträge) am Freitag, 9.November.2001, 21:35.
Re: Sortierung mit deutschen Umlauten Sortierung ganz einfach
Hallo Christoph,
so habs jetzt mit beiden Varianten ausgetestet. Meine ist schneller ;-)
Das liegt aber nicht am aufbau der indexreihe, sondern daran das ich bei Deiner Variante die Datenbank nochmals abrufen muss. Bei der erstellung der Indexreihe mit range 0,1 hole ich erstmal alle anfangsbuchstaben um die Indexreihe zu erstellen. Danach muss ich ja die Daten noch ausgeben. Dazu wieder die Datenbank abfragen und das für jeden gefundenen Buchstaben.
In meiner Variante durchlaufe ich die Datenbank nur einmal und erstelle 1. Die indexreihe und 2. füttere einen Hash mit den Daten der Datenbank.
Trotzallem ist das Problem mit der sortierung dank Deines vorschlages jetzt supersympel :-)
Einfach nen array A,Ä,B usw. und dieses wie in Deinem vorschlag zum aufruf der datenbank verwenden ;-) Tja ganz einfach.
Wenn Dus testen möchtest:
http://baseportal.de/cgi-bin/baseportal.pl?htx=/fracon/projekte/testen/sortieren
Test1 ist meine Variante
Test2 Deine
bis 1000 Datensätze durchgetestet.
Ich denke ich kann das ganze noch nen bischen optimieren vielleicht wirds ja nen Kompromiss aus beiden :-)
Im übrigen "es rieselt weisse Flocken" :-)
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Samstag, 10.November.2001, 12:43.
Re: Sortierung mit deutschen Umlauten Sortierung ganz einfach
Wie, Du musst danach auch noch Daten ausgeben?? Aber doch nich _alle_ (oder doch? ;-) ), sondern nur von einem bestimmten Buchstaben, oder?
Äh, ja, hab grade Deine Testseite aufgerufen - tatsächlich alle.... Aber was für einen Sinn macht denn dann die Indexreihe?? (Dann muss ich ja nur scrollen - achso, das sind "name"-Links auf dieselbe Seite)
Das is ja sowieso kein "guter Stil" ;-) - alle Datensätze rauszuhauen - bei 1000 Einträgen!!
Also ich dachte das "Szenario" wäre so: Es gibt eine Indexreihe am Anfang und erstmal keine Ausgabe von Datensätzen; dann klickt man auf einen Buchstaben und dann kommen alle Einträge mit diesem Buchstaben als Anfang. Hier könnte man noch a bisserl optimieren, indem man bei der Erstellung der Indexreihe eben diesen Buchstaben überspringt (wenn man schon 'H' gewählt hat, gibts ja keine Grund nochmal auf 'H' zu klicken).
Ich würde wetten, dann is meine Version bei 1000 Einträgen wieder schneller ;-)
Aber letztendlich isses wie man ja an der Laufzeit sieht auch wieder egal - wen kümmerts ob die Seite 0.49 oder 0.59 Sekunden braucht - es sei denn sie wird 2mal pro Sekunde aufgerufen ;-) Dabei isses aber wichtig die max. Anzahl der Einträge einzuschätzen - wenn diese z.B. 10000 oder 100000 oder mehr werden, dann sollte man schon über was anderes nachdenken... Aber bei <100 Einträgen isses egal...
Schnee: Brrrrrrr, ja, ganz schön kalt geworden ;-)
Antworten
Beitrag von fb (406 Beiträge) am Samstag, 10.November.2001, 20:20.
Re: Sortierung mit deutschen Umlauten Sortierung ganz einfach
Zum Stiel :-)
Tja das ist eben die frage ob das gut ist oder nicht. Natürlich stimm ich Dir im ersten Moment zu. Denn 1. Ich weis ja was drinsteht und nehme an jeder weis mit welchem Buchstaben der Begriff den er sucht anfängt :-)
Tja und im 2. Moment?
(oder was dafür spricht):
Endeckt man im Internet nich immerwieder interessante sachen per zufall? Ich suche also in meinem Fall einen begriff, scrolle runter oder klicke auf den Buchstaben "C", und sehe dann auch begriffe mir "D" und sieh an da steht ein begriff der mir schonmal über den weg gelaufen ist. Hätte ich warscheinlich sonst nicht enddeckt, würden mir nur die "C" Begriffe angezeigt. Die indexreihe ist natürlich Luxus. Zum schnellen springen (aber man gönnt sich ja sonst nix ;-)).
Tja und dann sind da noch die paar leutchen die sich im Internet noch nicht so auskennen und die bestätigen mir dann, das sie dass sehr übersichtlich finden. Ja und die andern wollen es lieber so wie du es vorschlägst (indexreihe ohne Daten).
Wie mans macht allen macht mans eh nie recht (glaube das kennst Du ganz gut)
Zum Überspringen:
Doch, um nochmal nachzuschauen ;-) denn den Zurückbutton kennen auch nicht alle.
OK nichts desto trotz mehr als 500 Einträge werden es warscheinlich nicht, zumindest nicht mehr in diesem Jahr ;-)
Ab aufs brettel da wirds einem Warm :-)
So hab ich wieder jeden absatz mit einem *smil* beendet ja gut :-)
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Samstag, 10.November.2001, 21:13.
Re: Sortierung mit deutschen Umlauten Sortierung ganz einfach
Wenn Du weisst was Du tust isses eine gute und schöne Lösung ;-) Ich wollte gar nicht Deinen Ansatz in Frage stellen, er war mir nur nich klar - wenn Du das so willst, dass alles auf einmal rausgehauen wird, dann isses natürlich am Besten alles auf einmal reinzulesen. In der beta brauchste da auch gar kein "get_next" mehr, das steht nach nem "get" schon innem Hash ;-)
Antworten