上下文: 我正在尝试为我的网站创建一个搜索功能,用户可以根据句子中的关键字与存储在MySQL数据库中的单词匹配,输入完整的句子并收到结果:
**ID | Skill**
1 | Painting
2 | Carpenter
3 | Builder
例如,用户可以搜索"我想要完成一些绘画" 并使用以下MySQL查询(以及foreach和explode函数)它将返回:
$stmt = $mysqli->prepare ("SELECT username FROM users WHERE users.id IN (SELECT
skills.userid FROM skills WHERE skills.skill LIKE CONCAT('%',?,'%') GROUP BY
skills.skill ORDER BY CASE WHEN skills.skill LIKE CONCAT(?,'%') THEN 0 WHEN
skills.skill LIKE CONCAT('% %',?,'% %') THEN 1 WHEN skills.skill LIKE CONCAT('%',?)
THEN 2 ELSE 3 END, skills.skill)");
考试题: 我遇到的问题是,如果用户输入"我想要一个画家"那么 ID 1 将不会被退回。如何修改查询以解释绘画和 painter 相似的事实,因此应该返回?
答案 0 :(得分:0)
您可以向技能表添加一个名为 synonymous 的列,其中包含该技能的一些关键字。
例如,“绘画”行将在 synonumous 列中有一个“paint painting paintor”。
然后,您更改查询以检查技能列的同义列。
这是一种简单的方法,但要求您为每个技能表行添加同义词。