Mysql suche realisieren

hi community,

ich habe mir ein adressbuch programmiert.
nun moechte ich verschiedene suchvarianten
realisieren.

hierzu folgende fragen:

  • anzeigen des anfangsbuchstaben des nachnamen als link
    bei klick auf beispielsweise „a“ werden alle nachnamen gezeigt
    die mit „a“ beginnen. Es sollen nur die buchstaben verlinkt sein,
    die wirklich vorhanden sind.

  • einschraenken der suche.
    ich hab schon mehrere varianten versucht… komme aber nicht auf mein
    gewuenschtes ergebnis:
    ich habe bisher ein suchfeld und eine dropdownbox.
    in der dropdownbox stehen die kategorien (nachname,vorname, firma) und das suchfeld ist ein eingabe feld.

nun moechte ich das beispielsweise erweitern…zum einen die dropdownbox durch eine textarea ersetzen in der man mehrere kategorien markieren kann. nach der er sucht… html ist klar… allerdings wie sieht das selectstatement aus?

das wars eigentlich… am liebsten waere mir ein link auf eine seite in der moeglichst auf deutsch die verschiedenen suchvarianten wie o. beschrieben erklaert werden. ich habe hier zwar schon was gefunden…das hatte mich aber nicht so befriedigt.

wer hilft? mein dank sei dein :smile:

Grusz

Michael

hi community,

ich habe mir ein adressbuch programmiert.
nun moechte ich verschiedene suchvarianten
realisieren.

hierzu folgende fragen:

  • anzeigen des anfangsbuchstaben des nachnamen als link
    bei klick auf beispielsweise „a“ werden alle nachnamen
    gezeigt
    die mit „a“ beginnen.

SELECT nachname FROM tabelle WHERE nachname LIKE „a%“

Es sollen nur die buchstaben verlinkt sein,
die wirklich vorhanden sind.

SELECT DISTINCT SUBSTRING( nachname, 1, 1 ) as erster_buchstabe
FROM tabelle ORDER BY erster_buchstabe

…gibt alle vorhandenen „ersten Buchstaben“

  • einschraenken der suche.
    ich hab schon mehrere varianten versucht… komme aber nicht
    auf mein
    gewuenschtes ergebnis:
    ich habe bisher ein suchfeld und eine dropdownbox.
    in der dropdownbox stehen die kategorien (nachname,vorname,
    firma) und das suchfeld ist ein eingabe feld.

nun moechte ich das beispielsweise erweitern…zum einen die
dropdownbox durch eine textarea ersetzen in der man mehrere

das ist kein textarea, sondern „SELECT … MULTIPLE“

kategorien markieren kann. nach der er sucht… html ist
klar… allerdings wie sieht das selectstatement aus?

SELECT nachname FROM Tabelle WHERE (kategorie1 LIKE „%suchbegriff%“) OR (kategorie2 LIKE „%suchbegriff%“) OR (kategorie3 LIKE „%suchbegriff%“)

oder so ähnlich (langsam). Oder aber mit Fulltext-Index:

SELECT nachname FROM Tabelle WHERE (MATCH(kategorie1) AGAINST („suche1“)) OR (MATCH(kategorie2) AGAINST („suchbegriff“))

Geht auch (wahrscheinlich sogar schneller) mit Indexen über mehrere Spalten und MATCH(Kategorie1,Kategorie2) AGAINST („suchbegriff“) , da muss man aber sicherstellen, das man nur nach solchen Kombinationen suchen kann, wo es auch einen Index gibt.

das wars eigentlich… am liebsten waere mir ein link auf eine
seite in der moeglichst auf deutsch die verschiedenen
suchvarianten wie o. beschrieben erklaert werden. ich habe

http://www.mysql.com/doc/de/index.html
http://www.mysql.com/doc/de/Fulltext_Search.html
http://www.mysql.com/doc/de/Functions.html

hier zwar schon was gefunden…das hatte mich aber nicht so
befriedigt.

Alexander

nun moechte ich das beispielsweise erweitern…zum einen die
dropdownbox durch eine textarea ersetzen in der man mehrere

das ist kein textarea, sondern „SELECT … MULTIPLE“

… und die Größe kann mit dem Attribut ‚size‘ bestimmt werden.

Oder aber mit Fulltext-Index:

SELECT nachname FROM Tabelle WHERE (MATCH(kategorie1) AGAINST
(„suche1“)) OR (MATCH(kategorie2) AGAINST („suchbegriff“))

Geht auch (wahrscheinlich sogar schneller) mit Indexen über
mehrere Spalten und MATCH(Kategorie1,Kategorie2) AGAINST
(„suchbegriff“) , da muss man aber sicherstellen, das man nur
nach solchen Kombinationen suchen kann, wo es auch einen Index
gibt.

Japp. Aber Vorsicht: Die Volltextsuche hat noch einige Eigenheiten, die man im Handbuch gerne überliest:

  1. Das Suchwort muss als Wort (siehe Handbuch für Definition) im Wert vorkommen. Wildcards sind erst ab MySQL 4 möglich.
  2. Wenn mehr als die Hälfte aller Zeilen passt, ist das Result-Set leer. (die 50%-Grenze)