Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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
PHP如何使用PHP检查数据库中的文本中是否包含字符串_Php_Mysql_Pdo_Phpmyadmin - Fatal编程技术网

PHP如何使用PHP检查数据库中的文本中是否包含字符串

PHP如何使用PHP检查数据库中的文本中是否包含字符串,php,mysql,pdo,phpmyadmin,Php,Mysql,Pdo,Phpmyadmin,我正在创建一个释义系统,用户在其中输入文本,系统为它们释义 我的数据库如下所示: 关键词:精致 同义词1:选择;美味;美味的;多汁的;甘美的;适口的美味的 同义词2:空灵的;美丽的;脆弱的;迷人的;娇小的;脆弱的雅致 其中关键字(varchar)、同义词1(text)和同义词2(text)是数据库列。上面的示例是一个数据库的一行,其中包含3个字段及其值 这就是它的工作原理,例如,如果系统发现一个像tasty这样的词,它可以被任何一个从Synomyn1或Synonym2或关键字中用分号分隔的词替换

我正在创建一个释义系统,用户在其中输入文本,系统为它们释义

我的数据库如下所示:

关键词:精致

同义词1:选择;美味;美味的;多汁的;甘美的;适口的美味的

同义词2:空灵的;美丽的;脆弱的;迷人的;娇小的;脆弱的雅致

其中关键字(varchar)、同义词1(text)和同义词2(text)是数据库列。上面的示例是一个数据库的一行,其中包含3个字段及其值

这就是它的工作原理,例如,如果系统发现一个像tasty这样的词,它可以被任何一个从Synomyn1或Synonym2或关键字中用分号分隔的词替换,因为它们都是同义词

让我解释一下单词搜索是如何工作的。系统首先在关键字列中搜索单词,如果找不到该单词,我会进一步在Synmon1列中搜索单词,依此类推

我的问题是在同义词1或同义词2列中检查用户的特定单词。当我使用LIKE子句(从数据库中搜索的一般方式)时,系统不是搜索全名,而是搜索字符。例如,假设作者的文本是:“本森有一个冰块”,系统假设冰是在cho中发现的。我不想那样,我想搜索一个完整的单词


如果有人理解我,请帮助解决这个问题。

如果我理解您的问题,您希望在
同义词1
同义词2
列中搜索
ice
,但请确保您不会无意中匹配一个词,如
选择

如果您读过或听过关于数据库规范化的任何内容,您会发现您的数据库甚至不符合1NF(第一个标准格式)的要求,因为它有由重复值组成的列,正如您所发现的,这使得搜索效率低下且困难。但让我们继续:

同义词列可能只包含一个单词,因此可能如下所示:

ethereal
或:

因此,您要查找的单词可能是:

  • 整列值
  • 前面没有任何内容,后面跟着一个
  • 前面有空格,后面有
  • 前面有空格,后面没有空格
  • 因此,如果您的MySQL版本不支持正则表达式,那么如果您正在查找列
    Synonyms2
    中的单词
    ice
    ,那么WHERE子句应该是:

    WHERE (
       Synonyms2 = 'ice'
       OR
       Synonyms2 like 'ice;%'
       OR
       Synonyms2 like '% ice;%'
       OR
       Synonyms2 like '% ice'
    )
    
    如果您正在运行SQL 8+,则:

    WHERE regexp_like(Synonyms2, '( |^)ice(;|$)')
    

    这说明
    ice
    前面必须有空格或字符串开头,后面必须有
    或字符串结尾。

    请不要只要求我们为您解决问题。向我们展示你是如何试图自己解决问题的,然后向我们展示结果是什么,并告诉我们为什么你觉得它不起作用。给我们一个明确的解释,什么是不工作的,并提供。读一个好问题。请检查最后一段,谢谢。我花了很长时间才回复,因为我正忙着申请这个解决方案。首先,我很高兴能够理解我的问题。我的问题是,如果我有一个像“dispose of”这样的词,那么
    %ice
    将是错误的,因为“dispose of”以“of”结尾,而“of”本身就是一个词。如果用户输入“of”,系统会将其与“dispose of”等词混淆。有什么帮助吗?根据您的解决方案,我开发了一个很好的模式,可以很好地用于我的系统。谢谢我很难理解你的问题<代码>处置
    是两个字。我的回答描述了如何查找单个单词,我认为您的同义词列是根据您的示例组成的。在看到您的第二条注释后,一切正常吗?如果您规范化了表,例如,您有一个表
    keyword\u同义词1
    ,其中列
    keyword
    ,行
    ('smart',intelligent'),('smart',sharp'),('smart',quick'),等等。
    表达“intelligent”的同义词,您所有的困难都消失了。
    WHERE regexp_like(Synonyms2, '( |^)ice(;|$)')