【问题标题】:Partial keyword searching in MySQLMySQL中的部分关键字搜索
【发布时间】:2014-05-09 09:44:12
【问题描述】:

上下文: 我正在尝试为我的网站创建一个搜索功能,用户可以输入完整的句子并根据句子中的关键字与存储在 MySQL 数据库中的单词的匹配来接收结果:

**ID | Skill**
1    | Painting
2    | Carpenter
3    | Builder

例如,用户可能会搜索“我想要完成一些绘画”,然后使用以下 MySQL 查询(以及 foreach 和 explode 函数)它将返回 ID 1 来自数据库:

$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。如何修改查询以说明 paintingpainter 相似且应返回的事实?

【问题讨论】:

  • 您将使用同义词表来包含所有技能的同义词。
  • 考试题?你要求我们做你的功课吗?
  • @CarlMarkham PHP 和 MySQL 的家庭作业?什么样的教育者会使用这些工具进行教学?别傻了。
  • @CarlMarkham 这是结构化问题解决中使用的描述符,用于说“到底是什么问题”,即我被问到的考试问题是什么

标签: php mysql search


【解决方案1】:

您可以在技能表中添加一个名为同义词的列,其中包含该技能的一些关键字。

例如,“Painting”行将在同义列中有一个“paint paintingpaintor”。

然后您更改查询以检查 skill 列中的 同义 列。

这是最简单的方法,但要求您为每个 skills 表行放置一个同义词。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多