全文搜索 - 关键字到关键字(输入字段>数据库列)

时间:2012-06-29 12:42:35

标签: mysql pdo full-text-search

任何人都可以帮我找到我想要的代码吗? 我有一个输入字段,其中将写入多个关键字 例如:

opel corsa car

我的数据库中有标记条目,以逗号分隔:

1. opel, corsa
2. car, opel
3. juice
4. car

我想要做的是,实施全文搜索,但基于关键字到关键字搜索,这意味着我想列出包含任何关键字的所有结果。 但是,如果有人搜索corsoa或corsae而不是corsa,我想用2个字母修剪这些搜索词。

到目前为止我得到的是:

$input = $_GET["tag"];
$input = mb_strtolower($input,'UTF-8');
$tag = explode(" ", $input);
$tagCheck = '(tags LIKE "%'.implode('%") OR (tags LIKE "%', $tag).'%")';

并在查询中

$dbq = $dbco->prepare("SELECT name FROM table WHERE ".$tagCheck." HAVING MAX(price) < 50000");

1 个答案:

答案 0 :(得分:0)

我建议你改变自己的Db设计(如果可以的话)。

尝试创建数据库关系以提高性能,使查询“更简单”。

在您的查询中

尝试使用MySQL的函数find_in_set。

SELECT ... WHERE FIND_IN_SET('1', field)

示例:

mysql> select * from fruits;
+-------------------------------+
| fruit                         |
+-------------------------------+
| banana, apple, orange, grapes |
+-------------------------------+
1 row in set (0.00 sec)

mysql> select * from fruits where find_in_set(' apple',fruit);
+-------------------------------+
| fruit                         |
+-------------------------------+
| banana, apple, orange, grapes |
+-------------------------------+
1 row in set (0.00 sec)

编辑:

如果您的表是MyISAM或Innodb(使用MySQL V. 5.6。+),您可以创建文本索引并使用类似

进行查询 在您的选择中

,请使用此

 SELECT ... WHERE tads like ('%text%')

使用%(通配符)