Sebi: Regular Expression in MYSQL Abfrage (oder LIKE)?

Einen wunderschönen Tag wünsche ich,

Ich habe ein Problem bei einer Datenbankabfrage.

Ich benutze eine SELECT Anweisung dieser Art:

SELECT p.id, p.name FROM personendaten AS p
INNER JOIN motoren AS m ON p.id = m.id WHERE m.keyword IN ('a','b','c')

Diese funktioniet tadelos und findet, wonach ich suche.
Nun möchte ich einen Pluralcheck einbauen.

Wenn in der Datenbank "Frau" steht, dann sollte dieser Eintrag auch bei der Suche nach "Frauen" gefunden werden. Ebenso sollte auch "Frauen" gesucht werden, wenn nach "Frau" gesucht wird.

Eine Verwendung von LIKE 'Frau%' funktioniert hier ja nur bei Variante eins ("Frau" liefert auch "Frauen"). Bei Variante zwei klappt es nicht.

Auch möchte ich vermeiden, dass eine Suche nach "Frau" mir auch z.B. "Frauenfussball" liefert.

Ich dachte da an einen regulären Ausdruck in der Suche, wüsste aber nicht wie der clever aussehen müsste. Da es sich nur um Pluralcheck handelt und ich damit eh nie alle Plurale abdecken kann (Wie "Taxen" oder "Pizzen"), denke ich an eine Routine dieser Art:

Suche nach Begriff "X":
Suche nach "X"
und "X" mit 1 oder 2 weiteren Zeichen am Ende des Wortes
und "X" mit 1 oder 2 Zeichen weniger am Ende des Wortes, wenn diese "en" oder "er" sind.

Der letzte Teil ist fragwürdig, weil es extrem viele Ausnahmen dieser Regel geben würde.
Ich denke ich komme um eine Vergleichstabelle der Art "Wenn 'Haus', dann auch suche nach 'Häuser'" nicht herum, aber ich würde zumindest bestmöglich ein paar Fälle abdecken.

Ich bin für jeden Rat dankbar,
Einen schönen Tag noch, auch wenn der Sommer gerade eine peinliche Vorstellung liefert...

Sebi

  1. Hallo,

    Einen wunderschönen Tag wünsche ich,

    Ich habe ein Problem bei einer Datenbankabfrage.

    Ich benutze eine SELECT Anweisung dieser Art:

    SELECT p.id, p.name FROM personendaten AS p
    INNER JOIN motoren AS m ON p.id = m.id WHERE m.keyword IN ('a','b','c')

    Diese funktioniet tadelos und findet, wonach ich suche.
    Nun möchte ich einen Pluralcheck einbauen.

    Wenn in der Datenbank "Frau" steht, dann sollte dieser Eintrag auch bei der Suche nach "Frauen" gefunden werden. Ebenso sollte auch "Frauen" gesucht werden, wenn nach "Frau" gesucht wird.

    Eine Verwendung von LIKE 'Frau%' funktioniert hier ja nur bei Variante eins ("Frau" liefert auch "Frauen"). Bei Variante zwei klappt es nicht.

    Auch möchte ich vermeiden, dass eine Suche nach "Frau" mir auch z.B. "Frauenfussball" liefert.

    Ja da gibt es was ganz spezielles ich hoffe ich helfe dir damit:

    SOUNDEX

    Gruß
    Andi

    1. Hallo Andi,

      nein, leider kann ich mit Deiner Antwort garnichts anfangen. Ein paar Google Links ergaben ein Name Indexing System, welches aber meinem Verständnis nach nichts mit meinem Problem zu tun hat.

      Gruß, Sebi

      1. hi,

        nein, leider kann ich mit Deiner Antwort garnichts anfangen. Ein paar Google Links ergaben ein Name Indexing System, welches aber meinem Verständnis nach nichts mit meinem Problem zu tun hat.

        *seufz*
        wenn es um mysql geht - warum suchst du dann nach einem dir genannten stichwort nicht erst mal in der mysql doku, anstatt das gesamte www abzugrasen ...?

        http://dev.mysql.com/doc/mysql/en/string-functions.html

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. wenn es um mysql geht - warum suchst du dann nach einem dir genannten stichwort nicht erst mal in der mysql doku, anstatt das gesamte www abzugrasen ...?

          Na warum sagst Du das nicht gleich anstatt nur ein einziges Wort zu nennen? Vielen Dank für den Hinweis, ich schau mir das gleich mal an.

          Einen schönen Tag noch!
          Sebi

          1. hi,

            Na warum sagst Du das nicht gleich anstatt nur ein einziges Wort zu nennen?

            war nicht ich, sondern Andi.
            aber ein wenig fähigkeit, sich mal an den relevanten stellen nach einem stichwort umzusehen, darf man wohl erwarten.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }