Ich baue eine grundlegende Suchfunktionalität mit LIKE (ich würde Volltext verwenden, kann es aber zur Zeit nicht) und ich frage mich, ob MySQL auf der Suche nach ein Schlüsselwort (z. B. WHERE-Feld wie "% word%") gibt auch 20 Wörter auf beiden Seiten des Schlüsselwortes zurück?Auswahl von X Wörtern aus einem Textfeld in MySQL
Antwort
Sie alles in der Abfrage Sie können mit SUBSTRING_INDEX
CONCAT_WS(
' ',
-- 20 words before
TRIM(
SUBSTRING_INDEX(
SUBSTRING(field, 1, INSTR(field, 'word') - 1),
' ',
-20
)
),
-- your word
'word',
-- 20 words after
TRIM(
SUBSTRING_INDEX(
SUBSTRING(field, INSTR(field, 'word') + LENGTH('word')),
' ',
20
)
)
)
Verwenden Sie die Funktion INSTR(), um die Position des Wortes in der Zeichenfolge zu finden, und verwenden Sie dann die Funktion SUBSTRING(), um einen Teil der Zeichen vor und nach der Position auszuwählen.
Sie müssten darauf achten, dass Ihre SUBSTRING-Anweisung keine negativen Werte verwendet oder Sie seltsame Ergebnisse erhalten.
Versuchen Sie das und berichten Sie zurück.
Ich glaube nicht, seine möglich die Anzahl der Wörter zu begrenzen zurückgegeben, aber die Anzahl der Zeichen zu begrenzen zurück Sie so etwas wie
SELECT SUBSTRING(field_name, LOCATE('keyword', field_name) - chars_before, total_chars) FROM table_name WHERE field_name LIKE "%keyword%"
- chars_before tun könnte - ist die Anzahl der Zeichen Sie auswählen möchten vor dem Suchbegriff (e)
- total_chars - wird wählen die Gesamtzahl der Zeichen Sie wünschen
dh das folgende Beispiel 30 Zeichen der Daten zurückgeben von 15 Zeichen vor dem Schlüsselwort
SUBSTRING(field_name, LOCATE('keyword', field_name) - 15, 30)
Hinweis starrend: wie Aryeh wies darauf hin, etwaige negative Werte in SUBSTRING() bummeln Dinge deutlich - zum Beispiel, wenn die Das Schlüsselwort wird innerhalb der ersten [chars_before] Zeichen des Feldes gefunden. Dann werden die letzten [chars_before] Zeichen der Daten im Feld zurückgegeben.
Ich denke, Ihre beste Wette ist, das Ergebnis per SQL-Abfrage zu erhalten und einen regulären Ausdruck programmatisch anzuwenden, der es Ihnen ermöglicht, eine Gruppe von Wörtern vor und nach dem gesuchten Wort abzurufen.
Ich kann es jetzt nicht testen, aber der reguläre Ausdruck etwas sein soll:
.*(\w+)\s*WORD\s*(\w+).*
wo Sie WORD
für das gesuchte Wort ersetzen und regex Gruppe 1 wie zuvor Worte verwenden, und 2 nach -words
ich werde es später testen, wenn ich meine RegexBuddy fragen, ob es sich :) funktioniert und ich werde es hier posten
- 1. Extrahieren von 8 Wörtern aus Orakel Textfeld
- 2. Zählen und Begrenzen von Wörtern in einem Textfeld
- 3. Ersetzen von Wörtern aus einem Array. PHP
- 4. Scannen von Wörtern aus Datei und Speichern in einem Array
- 5. MySQL: Auswahl der X kleinsten Werte
- 6. MySQL Datenbank von englischen Wörtern?
- 7. MYSQL Auswahl aus zwei Tabellen
- 8. Hinzufügen von Teilstrings aus einem Textfeld zu einem Listenfeld
- 9. MySQL Einfügen von einem Textfeld in mehrere Zeilen
- 10. jQuery-Ereignis nach Auswahl eines vorgeschlagenen Elements in einem Textfeld?
- 11. Entpacken Bild von Wörtern aus einem gescannten Papier
- 12. Zufällig aus mysql Auswahl aber nicht zweimal
- 13. Entfernen einer Gruppe von Wörtern aus einem Zeichenvektor
- 14. Eine Reihe von schlechten Wörtern aus einem PHP-Array filtern
- 15. Klassifizierung von Wörtern in einem Dokument
- 16. eine Auswahl aus einem großen Tisch Optimierung
- 17. python - String aus Wörtern in einem Array entfernen
- 18. E-Mail-ID aus einem Feld mit mehreren Wörtern in Mysql extrahieren
- 19. Java Kompilierfehler: Parameter x überschreitet die Grenze von 255 Wörtern
- 20. Cursor-Position in einem Textfeld (Zeichenindex, nicht x/y-Koordinaten)
- 21. zufällige Auswahl aus Array
- 22. Wie Liste von Wörtern aus Strings entfernen
- 23. Auswahl zusammenhängender Block von Datensätzen in MySQL
- 24. Extrahieren von Wörtern aus einem Absatz und dann Abgleich mit vorhandener Datenbank von Frau Access
- 25. Eine Gruppe von Wörtern aus einer XML-Datei aufteilen und in einem Array in Javascript speichern
- 26. Entfernen von Wörtern/Zahlen aus dem Text
- 27. Mehrere Spalten aus einem Textfeld aktualisieren
- 28. C#: zeigt die Auswahl von Text in einem Textfeld an, während ein anderes Formular fokussiert ist
- 29. Auswahl der Max und Min Datensätze in einem MySQL Befehl
- 30. Zählen von Wörtern aus Textdatei in Linked List in C
, wenn ich mehr als ein Wort haben Anpassung zu tun? was soll ich machen? – davidlee