ultimativen Suchquery nach Texten ?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • ultimativen Suchquery nach Texten ?

    Ich hab hier eine Datenbank mit einer Mischung aus englischen und deutschen Titeln. Gibt es denn jetzt einen wirklich guten Query um in einem Ruck und das performant intelligente Suchanfragen zu stellen?

    Moegliche Titel im datenbankfeld (varchar 255)

    The man upstairs
    Kalle in Österreich
    Philli-Experiment
    Harry Potter's Suche nach dem Glück
    Rambo 2

    Ideal waere jetzt wenn der Besucher nen Suchtstring eingibt und eben intelligent Ergebnisse ermittelt werden.

    "Harry GlUEck" -> zum Harry Potter-Ergebnis
    "Oesterreich" oder "Österreich" -> Österreich-Ergebnis
    "Experiment" -> Phili-Experiment-Ergebnis
    "the upstairs" -> the man upstairs-Ergebnis
    "Rambo II" -> Rambo 2

    Bei Amazon.de klappt das zum Beispiel hervorragend.

    Ich habe schon experimentiert mit dem Zerlegen des Strings und verknuepfungen mit "like %%'-queries und ein bisschen mit regexps. Aber das ist nicht gerade flott und brachte nicht immer Erfolg für jeden Fall.

    Gibts evtl schon ein fertiges Superskript dass eine Suchanfrage zerlegt und nach einem sehr guten Algorhythmus die Db dann durchsucht?

    danke
    Rocco
    Zuletzt geändert von Rocco; 02.01.2004, 11:28.

  • #2
    musst du schon ein bischen in php aufbereiten, aber dann geht´s mit REGEXP ganz einfach (und eigentlich auch flott, solange ein Index auf der Spalte liegt):[list=1][*]Backslash vor alle speziellen Zeichen für reguläre Ausdrücke
    $special = array('^', '$', '.', '?', '*', '+', '{', '}', '|', '(', ')', '[', ']', '\\\');[*]Umlaute durch Klammerausdrücke mit Alternativen ersetzen
    z.B. 'ä' => '(ae|ä|Ä)'[*]mit römischen Zahlen ist´s im Prinzip das gleiche, nur die Erkennung ist etwas komplizierter[*]Query-Anfang: 'select * from tabelle where 1';[*]für jedes Wort (Ausdruck an Leerzeichen aufsplitten) das hier anhängen:
    " and spalte regexp '". mysql_escape_string($wort). "'"[/list=1]
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      @Titus.

      mal ne frage am rande....

      welcher unterschied gibt es zwischen mysql_escape_string() und addslashes() ?

      das ist doch eigentlich beides das gleiche in grün. oder?
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        Original geschrieben von Abraxax
        welcher unterschied gibt es zwischen mysql_escape_string() und addslashes() ?

        das ist doch eigentlich beides das gleiche in grün. oder?
        na ja, viel unterschied macht's vermutlich nicht.
        eigentlich dürftest du so gut wie alle kritischen fälle auch mit addslashes entschärft haben, anführungszeichen, backslash und NUL sind ja das kritischste.

        aber z.b. auch mit dem kommentarzeichen # kann man u.U.(!) unsinn anstellen.

        mysql_(real_)escape_string ist eben extra für diesen zweck gedacht, also warum nicht auch benutzen?
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          alles klar. dann werde ich bei zukünftigen sachen mysql_escape_string() verwenden...
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar

          Lädt...
          X