Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL如何在一个句子中匹配两个单词_Mysql_Regex_Database - Fatal编程技术网

MYSQL如何在一个句子中匹配两个单词

MYSQL如何在一个句子中匹配两个单词,mysql,regex,database,Mysql,Regex,Database,我有一个表,列mytext包含句子 我想搜索那些有两个单词的句子,如“我的”“学校”,顺序任意 我想要的结果是 牛津是我的学校 我的名字是kk学校是jes 等等。您可以使用全文搜索 全文搜索基于全文索引,只能为MyISAM表、文本列以及非二进制CHAR和VARCHAR列创建全文索引 全文搜索不区分大小写。这是可以使用全文索引的列类型的结果 就你而言: 从mytable中选择*以匹配(mycolumn)与(“我的学校”) 如果您使用的是InnoDB表(很可能是),您可以使用LIKE语句: 从my

我有一个表,列mytext包含句子

我想搜索那些有两个单词的句子,如“我的”“学校”,顺序任意

我想要的结果是

  • 牛津是我的学校

  • 我的名字是kk学校是jes


  • 等等。

    您可以使用全文搜索

    全文搜索基于全文索引,只能为MyISAM表、文本列以及非二进制CHAR和VARCHAR列创建全文索引

    全文搜索不区分大小写。这是可以使用全文索引的列类型的结果

    就你而言:


    从mytable中选择*以匹配(mycolumn)与(“我的学校”)

    如果您使用的是InnoDB表(很可能是),您可以使用LIKE语句:

    
    从mytable中选择*,mycolumn如“%my%”
    或者像“%school%”这样的mycolumn;
    

    对于全文搜索,更好的解决方案是使用专门的搜索引擎,并针对这些目的进行优化。例如。

    查询:

    SELECT * 
    FROM mytable 
    WHERE mycolumn LIKE "%my%" 
    and mycolumn LIKE "%school%";
    
    还将返回以下句子:

    • “mysql学校”
    • “我以前的父母”
    但我们不想要它们

    您可以试试这个:

    SELECT * 
    FROM mytable 
    WHERE mycolumn regexp ' my |^my | my$'
    and mycolumn regexp ' school |^school | school$'
    
    但如果在mycolumn一栏中有如下句子:

    • 我爱我的学校
    您应该考虑添加另一个条件:

    SELECT * 
    FROM mytable 
    WHERE mycolumn regexp ' my |^my | my$'
    and mycolumn regexp '[^a-zA-Z]school[^a-zA-Z]|^school | school$'
    
    你可以用

    从表1中选择*,其中mycolumn REGEXP'(?=.*\bmy\b)(?=.*\bschool\b)'

    (?=
    这是一个正向前瞻。它与模式匹配,但不使用字符
    *
    匹配任意数量的任意字符
    \b
    匹配单词边界


    这是一个很好的方法,因为您可以添加新词,只需添加更积极的外观标题,如下所示:

    从mycolumn REGEXP'(?=.*\bmy\b)(?=.*\bspecial\b)(?=.*\bschool\b)所在的表1中选择*;


    (在一些应用程序中测试它,如HeidiSQL,可能需要逃避\使用\)

    你好,谢谢我尝试过它,但它不会返回句子“我的名字是kk学校是jes”
    从mytable中选择*,mytext REGEXP“school | my”
    可能会起作用。你好,谢谢你的帮助,它返回的句子有“school”或“my”并非所有的hanks查询都是我想要的,hanks for regexp解决方案!