PHP如何使用PHP检查数据库中的文本中是否包含字符串
我正在创建一个释义系统,用户在其中输入文本,系统为它们释义 我的数据库如下所示: 关键词:精致 同义词1:选择;美味;美味的;多汁的;甘美的;适口的美味的 同义词2:空灵的;美丽的;脆弱的;迷人的;娇小的;脆弱的雅致 其中关键字(varchar)、同义词1(text)和同义词2(text)是数据库列。上面的示例是一个数据库的一行,其中包含3个字段及其值 这就是它的工作原理,例如,如果系统发现一个像tasty这样的词,它可以被任何一个从Synomyn1或Synonym2或关键字中用分号分隔的词替换,因为它们都是同义词 让我解释一下单词搜索是如何工作的。系统首先在关键字列中搜索单词,如果找不到该单词,我会进一步在Synmon1列中搜索单词,依此类推 我的问题是在同义词1或同义词2列中检查用户的特定单词。当我使用LIKE子句(从数据库中搜索的一般方式)时,系统不是搜索全名,而是搜索字符。例如,假设作者的文本是:“本森有一个冰块”,系统假设冰是在cho冰中发现的。我不想那样,我想搜索一个完整的单词PHP如何使用PHP检查数据库中的文本中是否包含字符串,php,mysql,pdo,phpmyadmin,Php,Mysql,Pdo,Phpmyadmin,我正在创建一个释义系统,用户在其中输入文本,系统为它们释义 我的数据库如下所示: 关键词:精致 同义词1:选择;美味;美味的;多汁的;甘美的;适口的美味的 同义词2:空灵的;美丽的;脆弱的;迷人的;娇小的;脆弱的雅致 其中关键字(varchar)、同义词1(text)和同义词2(text)是数据库列。上面的示例是一个数据库的一行,其中包含3个字段及其值 这就是它的工作原理,例如,如果系统发现一个像tasty这样的词,它可以被任何一个从Synomyn1或Synonym2或关键字中用分号分隔的词替换
如果有人理解我,请帮助解决这个问题。如果我理解您的问题,您希望在
同义词1
和同义词2
列中搜索ice
,但请确保您不会无意中匹配一个词,如选择
如果您读过或听过关于数据库规范化的任何内容,您会发现您的数据库甚至不符合1NF(第一个标准格式)的要求,因为它有由重复值组成的列,正如您所发现的,这使得搜索效率低下且困难。但让我们继续:
同义词列可能只包含一个单词,因此可能如下所示:
ethereal
或:
因此,您要查找的单词可能是:
代码>
代码>
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(;|$)')