Die Teilung einer saite in einem CodeIgniter, Aktive Datensatz der SQL-Abfrage
Ich versuche zu tun, eine Suche, um zu sehen, wenn Sie eine textarea enthält einige Schlüsselwörter. Ich habe ein wenig Mühe, obwohl das Stopfen meiner textarea die Werte in der Abfrage.
Dies ist meine Abfrage:
$match = $this->input->post('wStory');
$this->db->where("`terms` LIKE '%$match%'");
$query = $this->db->get('filter_tbl');
return $query->num_rows();
Den $match
ist mein Textfeld, und was ich versuche zu tun ist, aufgeteilt, die Worte innen und führen Sie durch jedes einzelne Wort. Ich habe versucht mit PHPs' explode()
Funktion, die Art von Werken, aber in diesem Fall es funktioniert nicht, denn es stellt den string in ein array.
Gibt es eine Möglichkeit, ich kann aufgeteilt werden die Zeichenfolgen in meinem textarea zu nur Worte, und führen Sie durch die Wörter in der like-Anweisung, Oder ist es nur etwas, was ich bin fehlt?
Vielleicht anstatt mit der sql-where-Funktionen, Volltext-Suche könnte mehr nützlich
Nein, es hat mehrere. Ich habe eine Volltextsuche auf und wenn man ein oder zwei Wörter, in denen das Spiel funktioniert.
Ich habe fulltext auf die Spalte, die ich bin auf der Suche
Könntest du nicht einfach verwenden, preg_match_all()? Prüfen Sie in stackoverflow.com/questions/10684183/.... Und danach ein implode(",",$textareaArea)...?
InformationsquelleAutor zazvorniki | 2013-07-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Abfrage, die Sie derzeit ausführen, ist dabei eine Besondere phrase, sondern als Prüfung für eines der angegebenen Wörter.
Müssen Sie Folgendes tun:
Den
explode(' ', $match)
berücksichtigt nicht alle Satzzeichen, die vielleicht einzelne Wörter.wie gut, das scheint nicht zu funktionieren, es sei denn, alle Wörter in der Abfrage sind die Stichworte. Wenn man sich allerdings nicht gleich ein keyword dann kehrt er zurück mit einer 0
Ich habe bearbeitet Sie meine Antwort auf beide Fragen. Ich bin mir nicht sicher, wie es sein würde extra Räume, aber
trim()
sollte das Problem beheben.Anstelle der Verwendung von
->where()
es verwendet nun->or_where()
also nicht alle Suchbegriffe sind erforderlich für ein Element zurückgegeben werden. Würden Sie implementieren müssen, um eine Art ranking-system, also Elemente, die enthalten mehr keywords wird angezeigt, in Richtung der Spitze der Ergebnisse.Ich danke Euch so so sehr! Dies funktioniert erstaunlich!
InformationsquelleAutor Kirk Beard
Gibt es nicht eine
$this->db->like("terms", $match);
Methode?Sehen http://ellislab.com/codeigniter/user-guide/database/active_record.html#like
Sie können die Kette Ihre Methoden..
ja, aber das ist nicht wirklich mein Problem. Ich habe Probleme mit dem text Feld ich bin auf der Suche mehr als ein oder zwei Worte und spaltet Sie auf.
InformationsquelleAutor Half Crazed
Ich denke, Volltext-Suche ist der Weg zu gehen. Die url Rob W auch geschrieben gibt diese:
denen Sie in Betreuung wäre so etwas wie
Edit: Nach dem Lesen einiger weiteren, könnte dies besser (oder wenigstens besser lesbar):
Ich weiß nicht, ob Sie vertraut sind mit fulltextsearch, aber wenn Sie bei der Vorbereitung der string, $match richtig, es sollte nicht sehr schwierig sein? $matches4query = $match." > ".str_replace(" ", ", ", $match); kleines Beispiel 🙂
Ich bin mit Volltext-Suche, wo sonst ich auf meiner Website, also ich ' ve wurden arbeiten mit Ihnen für eine Weile. Diejenigen, die aber vom Nutzer eine von zwei Worten. Diesen einen aber ich bin mit der Suche über ein ganzes text-Bereich für ein paar wichtige Wörter und kann nicht einfach den ganzen text area in der Abfrage. Das ist, wo mein Problem ist. Danke für Eure Hilfe! Ich bin nicht wirklich zu verstehen, warum an Stelle der str_replace...das scheint zu Kaugummi bis der Suche.
InformationsquelleAutor Martijn
Versuchen Sie dies:
Nein, was sind die Ausgabe von $wordsArray dann? ($n_words sind nur für immer einen return-Wert der preg)
tut mir Leid. Versuchen Sie es erneut. Vielleicht sind Sie bekommen, was Sie wollen jetzt.
$wordsArray ist nicht wieder alles. Das scheint die Ursache des 500. Das ist, warum ich gefragt wurde, wie es scheint Ihr nicht die Einstellung nichts Wert.
welche Wörter hast du in der textarea, wenn Sie versuchen? (was ist der Wert von $match)
InformationsquelleAutor bestprogrammerintheworld