像任何单词包含的查询一样

时间:2013-06-11 15:33:38

标签: php mysql

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

以下是我的查询示例。如果我输入usaapple,但是如果我一起输入usa apple,则可以正常工作。结果是0.我想要的是当用户键入'usa apple'时,返回带有来自USA的苹果行(第一行)。

$search="usa apple";

fruit   country
apple   usa
apple   aus
banana  usa
orange  usa


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

1 个答案:

答案 0 :(得分: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]%')";

如果您认为用户可能使用除space之外的其他分隔符,则可以使用正则表达式来确定是否存在任何非字母数字的字符。然后,将该字符用作分隔符并标识各个关键字。

Determine if a character is alphabetic

[编辑]:

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

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

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