2

我是 mysql 数据库的新手。我有一个搜索栏,允许用户输入关键字和搜索。

这是我的查询的示例。如果我输入usaor apple,它可以正常工作,但如果我usa apple一起输入。结果为 0。我想要的是,当用户键入“美国苹果”时,返回带有来自美国的苹果的行(第一行)。

$search="usa apple";

fruit   country
apple   usa
apple   aus
banana  usa
orange  usa


SELECT * FROM market WHERE fruit LIKE '%$search%' || country LIKE '%$search%'
4

1 回答 1

3

好吧,首先您需要将输入搜索查询分成单独的关键字。在 php 中,您可以执行以下操作:

$keywords = explode(' ', $searchQuery);

然后,使用查询中的AND关键字来检索所需的行。

$query = "SELECT * FROM market WHERE fruit LIKE '%$keywords[0]%' AND country LIKE '%$keywords[1]%'";

由于有时关键字的顺序可能会颠倒,因此您也可以使用OR运算符。

$query = "SELECT * FROM market WHERE (fruit LIKE '%$keywords[0]%' AND country LIKE '%$keywords[1]%') OR (fruit LIKE '%$keywords[1]%' AND country LIKE '%$keywords[0]%')";

如果您认为用户可能使用不同于 a 的分隔符,space您可以使用正则表达式来确定是否存在任何非字母数字字符。然后,使用该字符作为分隔符并识别各个关键字。

判断一个字符是否是字母

[编辑]:

另一个简单的事情是,使用ORMySQL 的语句并检查是否有任何一个条件匹配。无需展开查询。

$query = "SELECT * FROM market WHERE (fruit LIKE '%$query%' AND country LIKE '%$query%') OR (fruit LIKE '%$query%') OR (country LIKE '%$query%') ";

此查询将首先检查两个关键字是否都存在,然后检查各个关键字是否存在并相应地返回。

于 2013-06-11T15:37:36.363 回答