我想插入“这是一个苹果,它是一个水果”来查询数据库,只匹配单词“苹果”和“水果”,而不是“水果”,并返回“1水果苹果红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";发布于 2010-10-02 03:08:34
很难说,但我认为如果您试图避免返回任何与单词不完全相同的内容(apple != apple)。您必须将$match字符串拆分成较小的部分,并逐个检查它们。可以使用explode()使用空格将字符串拆分,然后对适用的单词进行精确匹配。
目前,您正在检查数据库中任何可能与字符串相似的数据。因此,它可能会返回"pineapple是一种水果“,因为它有" is”、"a“和”水果“这三个词。
重命名数据库列可能也是值得的。没人知道你用name1,name2,name3来看代码....那类型,名字,颜色,数量呢?
$match = trim($match);
$match = strtolower($match);
$newmatch = explode(" ",$newmatch);因此,如果数组是"This is a $match“,$newmatch = array("this","is"," an "," apple”)
当然,这不会去掉任何标点符号。但是如果你喜欢trim和preg_replace,你可以提前做。
https://stackoverflow.com/questions/3842208
复制相似问题