Keyword Suche

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

  • Keyword Suche

    Ich habe in meiner MySQL Tabelle "keywords" die Keywords gespeichert. Diese hat 2 Spalten "id" und "keyword". Pro id können mehrere Keywords in der Tabelle vorkommen.
    Wenn ein User die Suche auf meiner Seite benutzt, sollen die id's folgendermaße aus der Tabelle ausgelsen werden:


    $suchstring="test";

    - Standard: falls $suchstring gleich ein Teil bzw. das ganze Keyword ist, soll die id gefunden werden.

    - Keyword in eckigen Klammern in DB: [testkeyword]
    id soll nur gefunden, werden wenn $suchstring exakt dem Keyword in den eckigen Klammern entspricht

    - ausschließendes Keyword in DB: -sonicht
    id soll nicht gefunden werden, falls $suchstring "sonicht" ist

    Wie sieht das SQL-Statement für sowas aus? Schaff das leider selbst nicht

  • #2
    Also, der User übermittelt den Suchbegriff und den Suchmodus (exakter Treffer, Treffer, Ausschluss) per Formular an ein php-Skript.

    Zuerst musst du unterscheiden
    a) Suchbegriff beginnt nicht mit einem "-" oder beginnt nicht mit einem "[" und endet mit einem "]"
    b) Suchbegriff beginnt mit "[" und endet mit "]"
    c) Suchbegriff beginnt "-"

    Das kannst du mit IF/SWITCH und den String-Funktionen von PHP ganz easy feststellen.

    in Fall a lautet die SQL-Syntax
    PHP-Code:
    "... suchbegriff like '".$_POST['NAME_DEINES_INPUT_FURE_SUCHBEGRIFF']."' ..." 
    bei b)
    PHP-Code:
    "... suchbegriff = '".$_POST['NAME_DEINES_INPUT_FURE_SUCHBEGRIFF']."' ..." 
    und c schaffst du jetzt sicher selber

    HTH!

    Kommentar


    • #3
      Original geschrieben von Patrick_PQ Also, der User übermittelt den Suchbegriff und den Suchmodus (exakter Treffer, Treffer, Ausschluss) per Formular an ein php-Skript.
      Nein, der User übermittelt den Suchmodus eben nicht selbst (wenns so wär, hätt ichs auch auf ne Art nach deiner Lösung gemacht, das ist jedoch so nicht möglich )
      Die ids sind ids von Einblendungen, die passend zum Suchwort eingeblendet werden sollen.
      Zuletzt geändert von dumbXhead@; 07.02.2005, 16:21.

      Kommentar


      • #4
        ähm, der User gibt doch "-parishilton" ein, wenn er das Suchwort "parishilton" nicht haben möchte, wenn der User "[Hilton]" eingibt erkennst du an den Klammern das parishilton nicht gewünscht ist ... also gibt der User letztlich doch den Suchmodus ein indem er das Minuszeichen bzw. eckige Klammern verwendet.

        Du musst nur prüfen, welche Variante der User duch seine Syntax gewählt hat - oder habe ich das falsch verstanden ?!

        Kommentar


        • #5
          Ok, ich habs vielleicht nicht so verständlich beschrieben, deshalb hast du ganz anders gedacht als ich.

          Also die Suche soll eine News-Datenbank mir diversen Artikeln durchsuchen. Der User selbst sucht mit ganz normalen Suchbegriffen (ohne Ausschließungen oder sonstiges) sondern nur mit Wörtern.

          Beispiele für Suchbegriffe: "hilton", "paris hilton", "paris"


          Er bekommt als Ergebnis dann passende Artikel geliefert und am rechten Rand der Seite Werbeanzeigen, deren Keywords mit dem Suchbegriff übereinstimmen (so ähnlich wie Google-AdWords). Und die Keywords der Anzeigen sind in der Datenbank gespeichert, auch inkl. Ausschließungen oder exakt gewünschter Treffer.

          Beispiele für Keywords: "paris", "reise", "-parishilton"

          Die Anzeige mit den Keywords soll also zb nur erscheinen falls nach "paris" oder "reise" gesucht wurde. Wenn zb "parishilton" eins der Suchworte war jedoch nicht.

          Verstehst du jetzt ungefähr, was ich meine?

          Die Syntax der Keywords gibt also nicht der User an, sondern ist bereits so in der DB gespeichert.
          Zuletzt geändert von dumbXhead@; 08.02.2005, 11:19.

          Kommentar


          • #6
            kappiert. Die Vorgehensweise bleibt grundsätzlich bestehen. Du musst mit LIKE und NOT IN arbeiten.

            Kommentar


            • #7
              Damit schaff ichs nicht, weil ja die Syntax wie gesagt nicht durch den User festgelegt wird sondern in der DB steht.

              Kommentar


              • #8
                ich wiederhole nochmal: du brauchst like um Teile von Keywörtern zu finden und NOT IN um Ausschlüsse zu finden.

                Wenn dein Suchbegriff "reise" ist und das Keyword "[Weltreise]" muss du mit like arbeiten ... etwa keyword like '[*reise*]' (Metazeichen je nach Datenbank!)

                Die Schschlüsse lassen sich wahrscheinlich nur mit Unterabfragen (Stichwort NOT IN) lösen.

                Bin ich jetzt auf der richtigen Spur - oder pass das immer noch nicht ?

                Kommentar


                • #9
                  Hast du dir das ganze überhaupt schon mal praktisch vorgestellt?
                  Wenn Keywords, exakte Keywords und ausschließende Keywords in der selben Spalte stehen?
                  Wie soll ich dann mit NOT IN arbeiten? Der User gibt wie gesagt die Syntax nicht an.

                  Kommentar


                  • #10
                    Hi,

                    ich versuche mir das praktisch vorzustellen und zu helfen. Folgendes habe ich verstanden: Der Bunutzer gibt einen Suchbegriff ein und zu diesem Suchbegriff wird ein Ergebins geliefert. Zusätzlich sollen Hinweise in Verbindeung mit der Tabelle keywords erfolgen - soweit korrekt?

                    Wenn ja: gibt der Benutzer "reise" ein und in deiner Tabelle keywords steht "reise" (exakter Treffer) soll ein Hinweis erfolgen. Steht in keywords "[weltreise]" reicht eine teilweise Übereinstimmung aus - da "reise" - das Suchwort des Users enthalten ist - erfolgt ebenfalls ein Hinweis. Soweit korrekt ?

                    Und jetzt erklär mir was bei die Ausschlüsse bewirken sollen. Falls bei einem Ausschluss keine Hinweise gegeben werden sollen, ist NOT IN doch genau richtig. Der User gibt "rucksackweltreise" ein und in keywords in "-rucksackweltreise" vorhanden. Dann sollen nur Hinweise gegeben werden wenn
                    PHP-Code:
                    ...keyword = ('reise' or keyword like '%reise%'
                    and 
                    keyword NOT IN (select keyword from keywords where left(keyword,1) ='-') ... 
                    jedenfalls vom Prinziep her. Das "-" muss beim Stringvergleich berücksichtigt werden.

                    Falls ich dich nicht verstehe maul nicht rum, sondern erklär es so, dass ich es verstehen kann (konkrete Beispiele, Onlinebeispiel, Ansätze etc). Falls du es noch nicht bemerkt hast: ich bin bisher der einzige der versucht dir zu helfen ...

                    Kommentar


                    • #11
                      sorry, habe gerade gesehen, dass bei eckigen Klammern die exakte Übereinstimmung gewünscht ist ... aber das ändert am Prinziep ja nichts ...

                      Kommentar

                      Lädt...
                      X