[PHP] verfeinerte Suche

Dieses Thema im Forum "Webentwicklung" wurde erstellt von blaah, 11. Juni 2007 .

  1. 11. Juni 2007
    verfeinerte Suche

    Hallo leute,

    wie kann ich eine verfeinerte suche bzw ein such vorschlag zurückgeben?
    z.B. man sucht einen user names gerd

    suche -> gerd

    findest und alles ist ok

    suche -> gred

    findet trotzdem gerd und gibt zurück: sie meinten wohl gerd

    in der db frage ich ja mit

    nickname like '%$suche%' wie kann ich es anstellen damit er mir trotz verschreiber jemanden findet.


    gruß blaah
     
  2. 11. Juni 2007
    AW: verfeinerte Suche

    cool danke,

    hab nich gewusst nach was ich suchen muss.

    http://de3.php.net/soundex

    prinzip habe ich verstanden.
    nur wäre es sinnvoller wenn ich das ganze innerhalb der mysql anweisung machen könnte. aber dazu habe ich noch jix gefunden.

    ansonsten müsste ich alle namen aus der db auslesen uns 1 nach dem anderen mit soundex vergleichen.

    habe hier was gefunden, für alle die es interessiert:

    PHP:
    $sql  SELECT  FROM TableName WHERE  ( SOUNDEX ( TableField ) =  SOUNDEX ( '.$suchwort.' )) ';  
     
  3. 12. Juni 2007
    AW: verfeinerte Suche

    vllt genügt das ja schon für deine anforderungen -> link

    greetz

    //edit: jaja sorry habs überlesen stieinigt mich -.-
     
  4. 12. Juni 2007
    AW: verfeinerte Suche

    Er hat doch schon geschrieben, dass er bereits mit LIKE abfragt, ihm aber das nicht reicht und er deswegen etwas anderes sucht. Bitte vorher lesen und mal bitte im anderen Thread antworten.
     
  5. 12. Juni 2007
    AW: verfeinerte Suche

    Hm ok so geht es, aber überlegen wir mal die Datenbank hat 100.000 User.
    Jetz klingen 1.000 Usernamen fast gleich.

    Ich gebe ein: Cydoc (und will diesen namen haben).
    dann gibt der mit aber 1.000 namen aus, weil wer anders vllt crydoc hat oder cyloc und die Werte von SOUNDEX sind zufällig gleich. schon darf man suchen^^

    Weil wenn ich mir angucke, dass
    "soundex("Euler") == soundex("Ellery"); // E460"
    sein soll...ich mein "Euler" hört sihc an wie "Ellery"?
    also für mich eindeutig nicht. ....

    Wenn du nur Schreibfehlern umgehen willst, könntest du ja die Buchstaben des Wortes untereinander tauschen, was wiederrum viel zu Resourcenfressend wäre.
    Beispiel:
    Jemand sucht nach: Cydoc
    Die Suche sucht nun nach 120 Namen (5!).


    Nun, das ganze kann man also auch vergessen.

    Was nun noch geht, wäre zu überprüfen, ob Buchstaben, die nebeneinander liegen auf der Tastatur, vertauscht wurden. (wie es bei gerd [gred] der Fall ist).
    Solche Schreibfehler sind ja auch die Häufigsten.

    Du musst also eine Liste von Buchstaben erstellen, die nebeneinander liegen.
    Einige kannst du auch rauslassen (zb [qw], [öä]), da die mit einer sehr hohen Wahrscheinlichkeit in keinem Namen vorkommen.
    Deine Array wird nicht groß sein. (Im Gegensatz zu den Überprüfungen der vorherigen Beispielen)

    Nun kannst du dein Suchstring nach zwei nebeneinanderliegenden Buchstaben durchsuchen und bei Fund den "zweiten Namen" abspeichern.

    Danach kannst du die DB durchsuchen. Ich könnte mir hier vorstellen, das eine durchschnittliche Überprüfung der Nebeneinander liegenden Buchstaben bei ca. 5-6 liegt.
    Dies ist doch recht klein im Gegensatz zu SOUNDEX [Nach meinen Vorstellungen, wie ich es oben nannte]

    Ich hoffe, dieser Beitrag hilft dir.
    Ich glaube nämlich, dass SOUNDEX viel zu Resourcenfressend ist, wenn man größere Mengen an Daten in einer DB hat und diese dann komplett durchsuchen lässt mit SOUNDEX.

    MfG

    Cydoc
     
  6. 12. Juni 2007
    AW: verfeinerte Suche

    für den algo aber schon...

    ein anderes problem:
    soundex("kristof") und soundex("christof") sind nicht gleich, denn erste stelle von soundex ist der anfangsbuchstabe, der zahlenwert dahinter ist wieder gleich...
    d.h.: der der eintippt muss zumindest den anfangsbuchstaben wissen...
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.