我是mysql数据库的新手。我有一个搜索栏,允许用户键入关键字和搜索。
以下是我的查询示例。如果我输入usa
或apple
,但是如果我一起输入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%'
答案 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%') ";
此查询将首先检查两个关键字是否都存在,然后检查各个关键字是否存在并相应返回。