首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将句子中的关键字与数据库表中预先存在的句子进行匹配?

问如何将句子中的关键字与数据库表中预先存在的句子进行匹配?
EN

Stack Overflow用户
提问于 2010-10-02 02:55:46
回答 1查看 98关注 0票数 0

我想插入“这是一个苹果,它是一个水果”来查询数据库,只匹配单词“苹果”和“水果”,而不是“水果”,并返回“1水果苹果红10”。

如何修改查询代码?

数据库名称'food‘字段如下:

代码语言:javascript
复制
id name1 name2 name3 name4 type
1 fruit apple red 10 article
2 fruit banana yellow 12 article
3 drink beer yellow 6 article
4 fruits apple yellow 16 books

代码:

代码语言:javascript
复制
mysql_connect("localhost", "root", "root") or die(mysql_error());
mysql_select_db("article") or die(mysql_error());
... ...
echo $match . "r"; // $match= This is a apple, it is a fruit
$query = mysql_query("SELECT * FROM food WHERE name1, name2 like '%$match%' ");
$row=mysql_fetch_array($query);
echo $row['id ']. "r" .$row['name1']. "r".$row['name2']. "r".$row['name3']. "r".$row['name4']. "n";
EN

回答 1

Stack Overflow用户

发布于 2010-10-02 03:08:34

很难说,但我认为如果您试图避免返回任何与单词不完全相同的内容(apple != apple)。您必须将$match字符串拆分成较小的部分,并逐个检查它们。可以使用explode()使用空格将字符串拆分,然后对适用的单词进行精确匹配。

目前,您正在检查数据库中任何可能与字符串相似的数据。因此,它可能会返回"pineapple是一种水果“,因为它有" is”、"a“和”水果“这三个词。

重命名数据库列可能也是值得的。没人知道你用name1,name2,name3来看代码....那类型,名字,颜色,数量呢?

代码语言:javascript
复制
$match = trim($match);
$match = strtolower($match);
$newmatch = explode(" ",$newmatch);

因此,如果数组是"This is a $match“,$newmatch = array("this","is"," an "," apple”)

当然,这不会去掉任何标点符号。但是如果你喜欢trim和preg_replace,你可以提前做。

帮助:trim()、strtolower()、explode()

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3842208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档