Seite 1 von 2
Anfangsbuchstaben aller Wörter in der Datenbank
Verfasst: 14.07.2007, 11:34
von Ice Man
Ich hab in einer DB viele viele Wörter / Begriffe
Nun wollte ich eine Art Index Anlegen, wo der User z.B. auf
"A" klickt und dann alle Begriffe mit "A" angezeigt bekommt.
Buchstaben von A-Z wären nicht das Problem, zahlen auch nicht.
Aber einige Begriffe fangen mit speziellen Zeichen an.
Nun dachte ich an eine Abfrage, die alle (Buchstaben, Zahlen und Zeichen) mit denen die Begriffe anfangen auszugeben.
Gibt es solch eine Funktion ?
Anderenfalls könnte ich auch nur die speziellen Zeichen anzeigen lassen.
In der Art etwat.
Select von begriffe_db where begriff nicht beginnt mit Buchstaben oder zahlen order by Begriff
gibt nur 1. Stelle aus.....
jemand ne Idee ?
Verfasst: 14.07.2007, 14:32
von Ice Man
Habs selbst hinbekommen, mit Hilfe von Google
Falls es jemanden interesiert
Code: Alles auswählen
WHERE `feld` REGEXP '^[^0-9]' and `feld` REGEXP '^[^A-Z]'
Verfasst: 14.07.2007, 14:57
von net(t)worker
wäre besser, da nur 1 regexp und somit schneller in der Ausführung, zudem wäre es so egal ob der Anfangsbuchstabe groß oder Klein geschrieben wird...
wichtig wäre hier dass auf dem feld 'feld' ein index liegt...
Verfasst: 14.07.2007, 15:19
von Ice Man
Danke für den Hinweis.
Dann übernehme ich das gleich, und hau den Index rein
Edit
bei '^[^0-9A-Z]' funktioniert es
bei '^[^0-9a-Z]' kommt ne Fehlermeldung ???
Verfasst: 14.07.2007, 15:31
von net(t)worker
hmm... dann machste es eben mit A-Z... gibt halt bei regexpr kleine Unterschiede bei unterschiedlichen verwendungen.. werden denn bei A-Z auch kleine Anfangsbuchstaben erfasst?
Verfasst: 14.07.2007, 15:36
von Ice Man
nö, so wie es sein soll, alles was nicht mit A-Z und mit 0-9 beginnt.
Also alles perfekt.
Und warum ist hier der INDEX so wichtig ?
Gehts dadurch schneller ?
Verfasst: 14.07.2007, 15:48
von net(t)worker
klar, wenn du ein index anlegst muss nicht immer die Tabelle durchsucht werden. Ein Index ist für eine Suche optimiert... wirklich drastische Unterschiede merkt man aber erst, wenn die Tabelle größer wird... viele User die zum ersten Mal mit Datenbanken rumbasteln, vergessen oft auf alle Felder die in where clausels vorkommen einen Index zu setzen. beim testen mit wenig Daten macht es sich auch nicht bemerkbar, aber wenn so ein script dann mal im Internet verwendet wird, und die datenbank immer mehr und mehr anwächst, belasten die DB Abfragen den DB Server teilweise so stark, dass in shared hosting umgebungen der Hoster die scripte deaktivieren muss... macht sich aber auch beim Seitenaufbau teilweise bemerkbar...
Verfasst: 14.07.2007, 20:09
von Ice Man
So schlimm ist es nicht, er werden nur rund 200-300 Ergebnisse ausgespuckt, bei rund 5000 Datensätze.
Und wenn der Server schlapp machen sollte, dann wechsle ich in das nächst größere Webspace Paket.
Besucher sind im Moment auch noch <1000 täglich.
Verfasst: 15.07.2007, 03:24
von To-Bi-As
hm, scheint zwar schon zu funzen, aber hier noch was von mir:
Code: Alles auswählen
SELECT *
FROM tabelle
WHERE LEFT( spalte, 1 ) = 'B'
Gibt alles aus was mit "B" in "spalte" beginnt.
Gruß, Ingo
Verfasst: 15.07.2007, 09:38
von Ice Man
Hi, das hab ich so gelöst
where spalte like 'b%'
Oder ist diese Abfrage zu Resourchend fressend ?
Verfasst: 16.07.2007, 13:26
von Hasenhuf
Die Umlaute nicht vergessen, falls nötig. Und bei WHERE wird nach meiner Erfahrung nicht zwischen Groß- und Kleinschreibung unterschieden.
PS: Ich habe mal bei sowas die Anfangsbuchstaben in einer extra Spalte gespeichert, das ist auf jeden Fall schneller, außer beim Speichern.
Verfasst: 16.07.2007, 13:35
von Ice Man
Die Umlaute nicht vergessen, falls nötig. Und bei WHERE wird nach meiner Erfahrung nicht zwischen Groß- und Kleinschreibung unterschieden.
Das ist ja auch gut so.
Als wenn ich auf "A" Klicken dann soll
Auto
Autobahn
arbeiten
Also alles mit A kommen, egal ob groß oder klein

Die Sache mit der Extra Spalte nur mit dem 1. Buchstaben ist auch ne gute Idee.
Weil ich dann ='a' machen könnte.
Vorher schreibe ich da die buchstaben immer klein rein.
Verfasst: 16.07.2007, 14:00
von Kylee
Ich versteh das grad nicht so recht du möchtest eine funktion die aus deiner DB alle ergebnisse zu einem bestimmten Buchstaben ausgibt ... was fängst du dann mit diesem regex an ?!
^[^0-9A-Z]
Zitat : nö, so wie es sein soll, alles was nicht mit A-Z und mit 0-9 beginnt.
Also alles perfekt.
?!?!?!?!?!
Und wie kann das funktionieren ohne delimiter ?!?!?!
damit groß und klein schreibung ingnoriert wird müsstest du nach dem delimiter am ende den modifier i (ignore case) setzen oder den ausdruck so A-Za-z schreiben....
Verfasst: 16.07.2007, 18:03
von Ice Man
OK, der where like '$b%' Code macht dann das, wenn man auf die Buchstaben klickt. Also alles mit A anzeigen.
Die Buchstaben habe ich über eine Schleife geschrieben.
for ($n=1;$n <= 26;$n++){
$chr=64+$n;
echo "<a href=\"?b=".chr($chr)."\">".chr($chr)."</a>\n";
}
Dann klicke ich die Buchstaben an.
Dann gibt es noch eine Funktion, die alles anzeigt, was nicht mit Buchstaben und zahlen beginnt.
Dafür nutze ich die Regex Funktion.
Hab das ganze wohl nicht genau erklärt

Verfasst: 16.07.2007, 20:58
von kill_bill
Wenn Du nur Buchstaben/Zeichen in deinem Index an- oder ausgeben willst, zu denen auch Einträge zu finden sind, könntest Du das mit folgender Query erfragen:
Code: Alles auswählen
SELECT DISTINCT SUBSTRING( `begriff` , 1, 1 ) AS Buchstabe
FROM datenbanktabelle ORDER BY Buchstabe