您的SELECT
只会查找文本包含通配符之间的位的行:您不能将LIKE
与比较逻辑组合在一起。
你可以做什么,但是,是使用正则表达式去掉文本的相关部分,然后分析它。
请记住,虽然,结合
一下子将不提供最佳的性能!我建议如下:
- 使用触发器,让你有 一些便于管理剔除文本的第(即50个字左右)一起工作, 将这个潜台词到一个单独的表
- 使用MySQL正则表达式或全文函数来分析您的COUNT秒
所以,你的触发器将有类似:
select
ltrim(rtrim(substring(paragraphs, instr(paragraphs, 'count:') + 6, 10)))
from books
where instr(paragraphs, 'count:') > 0
这会让你在'count:'
之后的下10个字符,修剪空白。那么你可以通过例如
select substring(text_snippet, 1, instr(text_snippet, ' ')) as count_value
from
(
select
ltrim(rtrim(substring(paragraphs, instr(paragraphs, 'count:') + 6, 10)))
as text_snippet
from books
where instr(paragraphs, 'count:') > 0
) x
where isnumeric(substring(text_snippet, 1, instr(text_snippet, ' '))) = 1
获得数值在COUNT位之后的行。
然后,您可以提取旁边COUNT数值,保存为数字在一个单独的表,然后使用JOIN这样的:
select b.*
from books b inner join books_count_values v
on b.id = v.books_id
where v.count_value > 0
看到这里
http://dev.mysql.com/doc/refman/5.1/en/string-functions.html
为在您的处置功能。
是的,使用'like'总是可以的,即使你只想用一列搜索,你也可以在这里看看:http://dev.mysql.com/doc/refman/ 5.1/EN /全文 - 自然语言。HTML和阅读关于布尔全文搜索也) – Najzero
@Najzero:我认为OP想要结合全文比较和全文内容的定性检查,在这种情况下,LIKE不会削减它。 – davek