Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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 MySQL中的部分关键字搜索_Php_Mysql_Search - Fatal编程技术网

Php MySQL中的部分关键字搜索

Php MySQL中的部分关键字搜索,php,mysql,search,Php,Mysql,Search,背景: 我正在尝试为我的网站创建一个搜索功能,用户可以在其中键入完整的句子,并根据句子中的关键字与MySQL数据库中存储的单词的匹配返回结果: **ID | Skill** 1 | Painting 2 | Carpenter 3 | Builder $stmt = $mysqli->prepare ("SELECT username FROM users WHERE users.id IN (SELECT skills.userid FROM skills WHERE

背景: 我正在尝试为我的网站创建一个搜索功能,用户可以在其中键入完整的句子,并根据句子中的关键字与MySQL数据库中存储的单词的匹配返回结果:

**ID | Skill**
1    | Painting
2    | Carpenter
3    | Builder
$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)");
例如,用户可以搜索“我希望完成一些绘制”,并使用以下MySQL查询(以及foreach和explode函数),它将从数据库返回ID 1

**ID | Skill**
1    | Painting
2    | Carpenter
3    | Builder
$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。如何修改查询以说明绘画和绘画是相似的,因此应该返回这一事实?

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

例如,“绘画”行在Synoumous列中将有一个“绘画画家”

然后将查询更改为检查同义列而不是技能列


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

您将使用同义词表包含所有技能的同义词。考试问题?你要我们帮你做作业吗?@CarlMarkham PHP和MySQL做作业?什么样的教育家用这些工具教学?别傻了。@CarlMarkham这是一个在结构化问题解决中使用的描述词,用来说“到底是什么问题”,也就是说,我被问的考试题是什么