MySQL比较查询长文本列

MySQL比较查询长文本列,mysql,longtext,Mysql,Longtext,我有一个LONGTEXT列,用来存储文本的段落。假设在这些段落中有如下内容: Text text text text COUNT: 75 text text text text text text text text text text select ltrim(rtrim(substring(paragraphs, instr(paragraphs, 'count:') + 6, 10))) from books where instr(paragraphs, 'count:')

我有一个
LONGTEXT
列,用来存储文本的段落。假设在这些段落中有如下内容:

Text text text text
COUNT: 75  text text
 text text text text
 text text text text
select 
ltrim(rtrim(substring(paragraphs, instr(paragraphs, 'count:') + 6, 10)))
from books 
where instr(paragraphs, 'count:') > 0
是否可以对所有文本中的小字符串“COUNT:75”进行比较查询

我的第一个想法是

SELECT * FROM `books`
WHERE `paragraphs` LIKE '%COUNT: >0%'

这可能吗?

您的
选择将只找到文本中包含通配符之间精确位的行:您不能将类似的
与类似的比较逻辑组合在一起

不过,您可以做的是使用正则表达式删除文本的相关部分,然后对其进行分析

不过,请记住,这一点

  • 大量文本
  • 文本内容逻辑
  • 正则表达式
所有这些都不能同时提供最佳性能!我建议如下:

  • 使用触发器删除文本的一部分,以便 可管理的东西(即50个字符左右)来使用, 将此子文本插入到单独的表中
  • 使用MySql正则表达式或全文函数分析计数
  • 所以你的触发器会有这样的东西:

    Text text text text
    COUNT: 75  text text
     text text text text
     text text text text
    
    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旁边的数值,将其作为数字保存在单独的表中,然后使用如下连接:

    select b.*
    from books b inner join books_count_values v
    on b.id = v.books_id
    where v.count_value > 0
    
    看这里


    对于您可以使用的函数。

    是的,使用“like”总是可能的,即使您只想使用一列进行搜索,您也可能想看看这里:并阅读布尔全文搜索)@Najzero:我认为OP希望将全文比较与对全文内容的定性检查结合起来,在这种情况下,LIKE不会削减它。感谢您的所有输入。