Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Anfangsbuchstaben aller Wörter in der Datenbank

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Ice Man
PostRank 9
PostRank 9
Beiträge: 2477
Registriert: 04.06.2003, 19:16

Beitrag von Ice Man » 14.07.2007, 11:34

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 ?

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Ice Man
PostRank 9
PostRank 9
Beiträge: 2477
Registriert: 04.06.2003, 19:16

Beitrag von Ice Man » 14.07.2007, 14:32

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]'

Anonymous

Beitrag von Anonymous » 14.07.2007, 14:57

Code: Alles auswählen

WHERE `feld` REGEXP '^[^0-9a-Z]'
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...

Ice Man
PostRank 9
PostRank 9
Beiträge: 2477
Registriert: 04.06.2003, 19:16

Beitrag von Ice Man » 14.07.2007, 15:19

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 ???

Anonymous

Beitrag von Anonymous » 14.07.2007, 15:31

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?

Ice Man
PostRank 9
PostRank 9
Beiträge: 2477
Registriert: 04.06.2003, 19:16

Beitrag von Ice Man » 14.07.2007, 15:36

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 ?

Anonymous

Beitrag von Anonymous » 14.07.2007, 15:48

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...

Ice Man
PostRank 9
PostRank 9
Beiträge: 2477
Registriert: 04.06.2003, 19:16

Beitrag von Ice Man » 14.07.2007, 20:09

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.

To-Bi-As
PostRank 6
PostRank 6
Beiträge: 443
Registriert: 08.10.2006, 02:20

Beitrag von To-Bi-As » 15.07.2007, 03:24

hm, scheint zwar schon zu funzen, aber hier noch was von mir:

Code: Alles auswählen

SELECT *
FROM tabelle
WHERE LEFT&#40; spalte, 1 &#41; = 'B'
Gibt alles aus was mit "B" in "spalte" beginnt.

Gruß, Ingo

Ice Man
PostRank 9
PostRank 9
Beiträge: 2477
Registriert: 04.06.2003, 19:16

Beitrag von Ice Man » 15.07.2007, 09:38

Hi, das hab ich so gelöst

where spalte like 'b%'

Oder ist diese Abfrage zu Resourchend fressend ?

Hasenhuf
PostRank 9
PostRank 9
Beiträge: 2840
Registriert: 26.12.2005, 22:22

Beitrag von Hasenhuf » 16.07.2007, 13:26

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.

Ice Man
PostRank 9
PostRank 9
Beiträge: 2477
Registriert: 04.06.2003, 19:16

Beitrag von Ice Man » 16.07.2007, 13:35

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.

Kylee
PostRank 2
PostRank 2
Beiträge: 63
Registriert: 18.12.2006, 14:18
Wohnort: Braunschweig

Beitrag von Kylee » 16.07.2007, 14:00

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....

Ice Man
PostRank 9
PostRank 9
Beiträge: 2477
Registriert: 04.06.2003, 19:16

Beitrag von Ice Man » 16.07.2007, 18:03

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 ;)

kill_bill
PostRank 8
PostRank 8
Beiträge: 882
Registriert: 07.07.2005, 00:31
Wohnort: Meppen

Beitrag von kill_bill » 16.07.2007, 20:58

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&#40; `begriff` , 1, 1 &#41; AS Buchstabe
      FROM datenbanktabelle ORDER BY Buchstabe

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag