如何将句子中的关键词与数据库表中预先存在的句子相匹配?

时间:2010-10-01 18:55:46

标签: php mysql

我想要插入“这是一个苹果,它是一个水果”来查询数据库,只匹配数据库中的'apple'和'fruit'而不是'fruit'并返回'1 fruit apple red 10'

如何修改查询代码?

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

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

代码:

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";

1 个答案:

答案 0 :(得分:3)

这很难说,但我想如果你试图避免返回任何不等于确切单词的东西(苹果!=苹果)。您必须将$ match字符串分成更小的部分并单独检查它们。 也许使用explode()来使用空格来区分字符串,然后对适用的单词进行精确匹配。

目前,您正在检查数据库中的任何数据,无论如何都可能类似于字符串。所以它可以归结为“菠萝是一种水果”只是因为它有“是”,“一个”和“水果”这两个词。

重命名数据库列可能也是值得的。没有人你看起来像name1,name2,name3的代码......类型,名称,颜色,金额怎么样?

$match = trim($match);
$match = strtolower($match);
$newmatch = explode(" ",$newmatch);

所以如果$ match是“这是一个苹果” $ newmatch = array(“this”,“is”,“an”,“apple”)

当然,这不会摆脱任何标点符号。但如果你喜欢trim和preg_replace,你可以事先做好。

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