MySQL比较查询longtext列

时间:2012-09-20 06:10:26

标签: mysql longtext

我有一个LONGTEXT列,用于存储文本段落。让我们说在这些段落中有类似的东西:

Text text text text
COUNT: 75  text text
 text text text text
 text text text text

是否可以对所有文本中的小字符串“COUNT:75”进行比较查询?

我的第一个想法是

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

这甚至可能吗?

1 个答案:

答案 0 :(得分:1)

您的SELECT只能找到文本中包含通配符之间位的行:您不能将LIKE与比较逻辑组合在一起。

可以做的是使用正则表达式删除文本的相关部分,然后分析它。

但请记住,结合

  • 大量文字
  • 文字内容逻辑
  • 正则表达式

一下子将无法提供最佳性能!我建议如下:

  1. 使用触发器删除文本的子部分,以便您拥有 可以管理的东西(即50个字符左右), 将此子文本插入单独的表格
  2. 使用MySql正则表达式或全文功能分析您的COUNT
  3. 所以你的触发器会有类似的东西:

    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

    可供您使用的功能。