我正在構建一個基本的搜索功能,使用LIKE(我會使用全文,但目前不能),我想知道MySQL是否可以,搜索一個關鍵字(例如WHERE字段LIKE'%word%')會返回關鍵字兩邊的20個單詞嗎?從MySQL中的文本字段中選擇X字
1
A
回答
2
可以使用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
)
)
)
0
使用INSTR()函數在字符串中查找單詞的位置,然後使用SUBSTRING()函數在位置前後選擇一部分字符。
您必須注意,您的SUBSTRING指令不使用負值,否則會得到奇怪的結果。
試試這個,然後回報。
1
我不認爲它可以限制返回單詞的數量,但是要限制字符的數量退還你可以做類似
SELECT SUBSTRING(field_name, LOCATE('keyword', field_name) - chars_before, total_chars) FROM table_name WHERE field_name LIKE "%keyword%"
- chars_before - 是 字符數你希望 關鍵字
- total_chars之前選擇 - 是要 字符的 總數選擇
即下面的例子將返回數據的關鍵字之前從15個字符盯着的30個字符
SUBSTRING(field_name, LOCATE('keyword', field_name) - 15, 30)
注:如aryeh指出的那樣,在SUBSTRING()任何負值相當壞蛋東西 - 例如,如果所述關鍵字在字段的第一個[chars_before]字符中找到,然後返回字段中最後一個[chars_before]字符的數據字符。
0
我認爲你最好的選擇是通過SQL查詢得到結果,並以編程方式應用一個正則表達式,這將允許你在搜索到的單詞之前和之後檢索一組單詞。
我現在不能測試,但正則表達式應該是這樣的:
.*(\w+)\s*WORD\s*(\w+).*
,你更換WORD
的搜索詞,並使用正則表達式1組爲前字,和2後-words
我以後會測試它時,我可以問我RegexBuddy是否會工作:)我將張貼在這裏
相關問題
- 1. MySQL從標準表中選擇字段
- 2. Mysql選擇動態文本字段
- 3. 如何從mySQL選擇的行中選擇一個字段
- 4. 從dbgrid中選擇字段
- 5. 從CakePHP中關聯表字段名='x'的表中選擇PHP
- 6. 試圖從mysql字段中顯示30段文字到段落中的文本?
- 7. 如何從不同的表格(字段x)中選擇所有字段?笨
- 8. 在MySQL中選擇一個雙字字段名稱,從PHP
- 9. mysql在多個字段中選擇
- 10. 如何在MySQL中選擇字段值
- 11. 在mysql問題中選擇字段
- 12. 預先選擇字段數組中選擇字段的選項?
- 13. 如何選擇monkeyrunner文本字段中的所有文本?
- 14. 部分選擇文本字段中的文本
- 15. MySQL查詢 - 選擇字段
- 16. 如何:從MYSQL文本字段中只選擇除以|使用REGEXP?
- 17. 從文本字段中選擇最佳值
- 18. 從表中選擇特定的字段?
- 19. MySql字符串操作,從文本中選擇項目
- 20. 「選擇字段作爲X ...」 Django的ORM
- 21. MySQL選擇帶X字的列
- 22. JS:僅從文本字段中選擇數字,再加上簡單的計算?
- 23. 如何從MySQL的視圖中選擇一個字段?
- 24. 如何從選擇菜單的選項填充文本字段
- 25. mysql文本字段中的HTML標記
- 26. 當更改選擇字段的值時更新文本字段
- 27. jQuery X-Editable:根據其他選擇字段的值更新選擇字段
- 28. 在豐富的文本框中,選擇一段文字
- 29. 從連接表中選擇字段
- 30. 從關係中選擇特定字段
如果我有一個以上的字做配套?我該怎麼辦? – davidlee 2015-10-31 06:07:05