php - PHP如何使用php检查数据库中的文本中是否包含字符串
问题描述
我正在创建一个释义系统,用户输入文本和系统为他们释义。
我的数据库如下所示:
关键词:精致
同义词1:选择;可口的; 可口; 多汁;甜美; 可口; 咸味的
同义词2:空灵;美丽的; 脆弱的; 迷人; 娇小;脆弱; 优雅的
其中 Keyword (varchar)、Synonym1 (text) 和 Synonym2 (text) 是数据库列。上面的示例是具有 3 个字段及其值的数据库的一行。
例如,如果系统找到一个单词,例如,它是这样工作的,那么它可以被任何用分号分隔的单词替换 Synomyn1 或 Synonym2 或关键字,因为它们都是同义词。
让我解释一下单词搜索是如何工作的。系统先在Keyword栏搜索单词,如果没有找到,我再往Synmon1栏搜索单词,以此类推。
我的问题是在 Synonym1 或 Synonym2 列中检查用户的特定单词。当我使用 LIKE 子句(从数据库中搜索的通用方式)时,系统不是在搜索全名,而是在搜索字符。例如,假设作者的文本是:“ Benson has an ice cube ”,系统假设在 cho ice 中发现了冰。我不想这样,我想搜索一个完整的单词。
如果有人理解我,请帮助解决这个问题。
解决方案
ice
如果我理解您的问题,您希望在列中进行搜索Synonyms1
,Synonyms2
但要确保您不会无意中匹配诸如choice
.
如果您曾经阅读或听过有关数据库规范化主题的任何内容,您会意识到您的数据库甚至不满足1NF(第一范式)的要求,因为它具有由重复值组成的列,正如您发现的那样, 使搜索效率低下且困难。但让我们继续:
同义词列可能只包含一个词,因此它可能如下所示:
ethereal
或者:
ethereal; beautiful; fragile; charming; petite; frail; elegant
因此,您正在寻找的词可能是:
- 整列值
- 前面没有,后面跟着一个
;
- 前面有一个空格,后面跟一个
;
- 前面有一个空格,后面没有任何内容
因此,如果您的 MySQL 版本不支持正则表达式,那么如果您正在寻找例如ice
column中的单词Synonyms2
,则 WHERE 子句应该是:
WHERE (
Synonyms2 = 'ice'
OR
Synonyms2 like 'ice;%'
OR
Synonyms2 like '% ice;%'
OR
Synonyms2 like '% ice'
)
如果您正在运行 SQL 8+,则:
WHERE regexp_like(Synonyms2, '( |^)ice(;|$)')
这表明ice
必须以空格或字符串开头,后跟字符串;
或字符串结尾。
推荐阅读
- python - 如果满足 1 个参数,则从 CSV 中提取多行并保存到新的 CSV 文件
- .net - InteractiveBrowserCredential 有时不显示弹出窗口
- reactjs - 我可以在“反应”文件的哪里找到组件模块?
- google-apps-script - 无法从 GAS HTMLService 内容更改电子表格菜单
- c# - CRC-16 和/或帧校验序列
- reactjs - 无法使用状态挂钩增加状态变量
- javascript - 通过 AJAX 将 HTML 转换为 PHP 表单输入
- javascript - Javascript - 将特定对象转换为另一种类型的对象?
- mongodb - 更新 Mongo 中的两个嵌套元素
- python - 将输入推送到从函数中分离 DOTenv 文件