Suchefunktion mal richtig

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

  • Suchefunktion mal richtig

    Hi,

    ich habe hier eine Tabelle mit nem Haufen Software die auf einer Downloadplatform angeboten werden.

    Nun, natürlich gibt es da eine Suche für - wie das ja auch Sinn macht.
    Die Suche ist allerdings von der marke "WHERE blub like '%suchbegriff%'".
    Nun will ich das ganze "ordentlich" machen.

    Man soll Operatoren benutzen können um zum Beispiel nach "leber +käse" suchen zu können, was natürlich das selbe ist (oder nicht?) wie "leber käse". Natürlich will ich auch nach "leber -käse" suchen können.

    Meine Idee war einfach zu schauen ob ich +/- im Suchstring habe, evtl. danach zu exploden und die dann mit "AND like..." in die Query zu hängen (oder entsprechen AND NOT).

    Über jegliche Gedankenanstöße wie man das am geschicktesten lösen kann würde ich mich freuen.

  • #2
    [list=1][*]
    Code:
    <form action="search.php" method="post">
    Begriffe, die vorhanden sein müssen:
    <input type="text" name="needed" /><br />
    <input type="radio" name="needed_and_or" 
      value="and" checked="checked" /> Alle Begriffe<br />
    <input type="radio" name="needed_and_or" 
      value="or" /> Min. 1 Begriff
    <br /><br />
    Begriffe, die nicht vorhanden sein dürfen:
    <input type="text" name="disallowed" /><br />
    <input type="radio" name="disallowed_and_or" 
      value="and" checked="checked" /> Alle Begriffe<br />
    <input type="radio" name="disallowed_and_or" 
      value="or" /> Min. 1 Begriff
    </form>

    [*]Exploden bei Leerzeichen, die nicht in " oder ' eingeschlossen sind, leere Zeichenketten unter den Tisch fallen lassen, den Rest trimmen und das erste Zeichen untersuchen und dann alles mit AND/OR verknüpfen wäre mal ein erster Ansatz.

    Musst dir nur überlegen, was genau gefunden werden soll, Beispiele (keine Ahunng, wie du das realisieren willst):
    • leber käse
      findet alles, wo leber oder käse drinsteht
    • leber +käse
      - findet alles wo leber und käse drinsteht
      - findet alles wo käse drinsteht, steht leber auch noch drin, taucht der eintrag in der liste weiter oben auf
    • leber -käse
      - findet alles wo leber und nicht käse drinsteht
      - findet alles wo käse nicht drinsteht, steht leber auch noch drin, taucht der eintrag in der liste weiter oben auf
    • leber "käse von kühen aus bodenhaltung"
      - findet alles wo leber und der Text "käse von kühen aus bodenhaltung steht" drinsteht
    • ...
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Hey, das mit exploden beim leerzeichen ist ne gute idee.... wie ich das realisiere, das er die in " oder ' nicht nimmt weiß ich zwar noch nicht, aber das werden wir sehn.

      Hab das eben hier noch mal diskutiert und die Anforderungen klar gemacht.

      Die Anforderungen sind also folgende:

      1. emule filesharing kazaa - alle drei begriffe müssen vorkommen (UND)
      2. +emule +filesharing - siehe 1
      3. filesharing -emule - alle filesharing OHNE emule
      4. +emule filesharing - suche nache "emule" wenn auch "filesharing" dann höher sortieren

      Oder suche fällt quasi raus oder man macht den Schalter den mrhappiness vorgeschlagen hat.

      1+3 Sind ja noch einfach. Mir machen eher solche konstrukte Sorgen:
      "emule client" +kazaa
      emule -leberkäse +kazaa

      Wobei das ja nur ordentlich auseinandergenommen werden muss..

      und punkt 4... dann muss ich nämlich nach der Query, also im Result, nochmal gesucht werden und erneut sortiert werden.... mom keine Idee wie ich das der DB mitteile.

      Kommentar


      • #4
        http://dev.mysql.com/doc/mysql/en/fulltext-boolean.html

        Sehr nice, das hilft doch schon sehr weiter....

        Kommentar

        Lädt...
        X