Stefan: Suchstring Parsen und Werte Variablen zuweisen

Hallo Zusammen.

Ich möchte als lernbeispiel eine art Suchzeile für eine Buchverwaltung
programmieren. Diese sollte Google-ähnlich Keywords erkennen
und diese umsetzen.

Konkretes Beispiel - Mein Suchstring lautet:

SQL Für Anfänger -MSSQL Preis <50 Autor Hans-Peter Beschreibung Die Welt ist schön mit MySQL

Nun möchte ich diese Keywords nutzen um den MySQL String zusammenzusetzen:

SELECT * FROM Books WHERE title LIKE "%SQL Für Anfänger%" AND title NOT LIKE "%MSSQL%" AND price < 50 AND autor LIKE "%Hans-Peter" AND desc LIKE "%Die Welt ist schön mit MySQL"

Nun hatte ich folgenden Lösungsansatz:

Ich nutze die Keywords als Trenner und Arbeite mit multiplen Explodes.
Problem war dabei nur, dass die Reihenfolge Willkürlich ist
und ich dabei nicht wissen kann, welches Keyword ich zuerst als Trenner
nehmen soll, bzw. wie ich dann die entstandenen Werte der entsprechenden
Variable zuordnen soll.

Vielleicht hat ja jemand einen Lösungsansatz.

Vielen Dank schon mal :-)
Gruß,

Stefan

  1. Grüße,
    explode am leerzeichen mit schleife, die array durchläuft und jede gruppe bis zum nächsten keword getrennt behandelt wäre imme rnoch rcht einfach, du köntnest aber auch regexp versuchen, wobei die anzahl der trennwörter etwas zu hoch ist :/
    MFG
    bleicher

    --
    __________________________-

    FirefoxMyth
    1. Grüße,
      explode am leerzeichen mit schleife, die array durchläuft und jede gruppe bis zum nächsten keword getrennt behandelt wäre imme rnoch rcht einfach

      Jep, so habe ich es gemacht. Habe jedes Einzelne Wort durcharbeiten lassen,
      von keyword bis keyword. Einige habe ich fix Parsen lassen, da sie immer
      fest 2 Worte danach gebraucht haben.

      Den Titel habe ich dann einfach als Überbleibsel gesehen,
      sprich nachdem ich alles Restliche anbziehe, bleibt er übrig und siehe da
      es klappt!

      Habe den Parser zumindest mal so wie ich ihn jetzt ausgearbeitet hab
      ohne die Umwandlung in den MySQL String halt als url mitgegeben,
      falls mal nach einem solchen Beispiel gesucht wird *g*

      Danke für die Hilfe

      Gruß,
      Stefan

      1. Hi!

        $strExplode = explode(" ", $strInput);
        for ($i = 0; $strExplode[$i] <> ""; $i++)
        [...] und siehe da es klappt!

        ... nur solange man keine zwei Leerzeichen hintereinander eingibt. Du solltest die Schleife so oft laufen lassen, wie Elemente im Array sind, nicht einfach hochzählen und auf Elemente zugreifen, die gar nicht da sind und noch dazu mit einem Leerstring vergleichen, obwohl der Wert in dem Fall null ist. Der Zugriff auf das "hinterletzte" Element (jedenfalls solange keine zwei Leerzeichen aufeinander folgen) erzeugt zu Recht eine Notice-Meldung, wenn man das error_reporting auf E_ALL (und display_errors auf on) stehen hat, was beim Entwickeln immer eine gute Idee ist.

        Habe den Parser zumindest mal so wie ich ihn jetzt ausgearbeitet hab
        ohne die Umwandlung in den MySQL String halt als url mitgegeben,
        falls mal nach einem solchen Beispiel gesucht wird *g*

        ... wird niemand es im Archiv finden, weil die URL und Email in den Extra-Feldern nicht mit ins Archiv übernommen werden.

        Lo!

  2. Hi!

    Ich möchte als lernbeispiel eine art Suchzeile für eine Buchverwaltung programmieren. Diese sollte Google-ähnlich Keywords erkennen und diese umsetzen.

    Schreib dir einen Parser. Der merkt sich, welches Keyword gerade aktiv ist und sammelt bis zum nächsten Keyword. Wenn deses festgestellt wird, kannst du das vorhergehende inklusive der gesammelten Daten auswerten oder zur späteren Auswertung geeignet ablegen.

    Lo!