【问题标题】:Mysql : I need to search record where searched text is matched with third wordMysql:我需要搜索搜索文本与第三个单词匹配的记录
【发布时间】:2016-05-21 11:09:18
【问题描述】:

我需要搜索记录,其中搜索到的文本与数据库记录中的第三个单词匹配。

示例:假设我在描述字段中有三个记录

This is alex from Usa
This is Michael from India
This is xyz  from Canada

我希望我搜索的内容应该只检查第三个单词。在 mysql 中怎么可能?怎么写这样的查询?

【问题讨论】:

  • 请记住,搜索的文本必须只检查第三个单词,如果匹配到任何其他单词,则不应返回结果。
  • 结帐mysql全文搜索。
  • 我认为全文搜索用于像自然语言搜索一样进行搜索。但我只想从特定的定位词中搜索词。所以应该有其他选择。
  • 你知道这超级不靠谱吗? this is mary jane from italy 怎么样?或My name is peter from france?
  • 匹配的需要返回整行还是只返回匹配的单词?

标签: mysql


【解决方案1】:

你可以使用 substring_index

select * from my_table 
where  SUBSTRING_INDEX(SUBSTRING_INDEX(ip,' ',3),' ',-1) =  'Your_text';

或者如果需要的话使用像

select * from my_table 
where  SUBSTRING_INDEX(SUBSTRING_INDEX(ip,' ',3),' ',-1) like  '%Your_text%';

【讨论】:

    【解决方案2】:

    您可以使用 REGEXP_REPLACE,如果您可以这样做:

    SELECT REGEXP_REPLACE('This is alex from Usa. and mor Text','^\\w+ \\w+ \(\\w+\).*$','\\1');
    

    示例

    MariaDB [bb]> SELECT REGEXP_REPLACE('This is alex from Usa. and mor Text','^\\w+ \\w+ \(\\w+\).*$','\\1');
    +--------------------------------------------------------------------------------------+
    | REGEXP_REPLACE('This is alex from Usa. and more Text','^\\w+ \\w+ \(\\w+\).*$','\\1') |
    +--------------------------------------------------------------------------------------+
    | alex                                                                                 |
    +--------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)
    
    MariaDB [bb]>
    

    见:https://mariadb.com/kb/en/mariadb/pcre/

    您还可以在 (MariaDB) 您的表中创建一个虚拟持久性字段,该字段自动仅保存 3 个单词。所以你可以在这个字段上使用索引

    像这样创建表

    CREATE TABLE table1 (
         a INT NOT NULL,
         yourtext VARCHAR(32),
         c INT AS (a mod 10) VIRTUAL,
         word VARCHAR(20) AS 
          (REGEXP_REPLACE(yourtext,'^\\w+ \\w+ \(\\w+\).*$','\\1')) PERSISTENT);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-22
      相关资源
      最近更新 更多