【问题标题】:Full text search - keyword to keyword (input field>database column)全文搜索 - 关键字到关键字(输入字段>数据库列)
【发布时间】:2012-06-29 12:42:35
【问题描述】:

谁能帮我得到我想要的代码?
我有一个输入字段,其中将写入多个关键字。
示例:

opel corsa car

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

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

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

到目前为止我得到的是:

$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");

【问题讨论】:

  • 注意:如果有人输入“opel corsa”,我不想列出“car, opel”...

标签: mysql pdo full-text-search


【解决方案1】:

我建议您更改您的 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.+),您可以创建文本索引并使用 like 进行查询

在你的选择中,使用这个

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

使用 %(通配符)

【讨论】:

  • 感谢您的建议,但我认为这不能解决我的问题。如果有人搜索“苹果橙”怎么办。一旦找到“苹果”,这个想法不会停止吗?如果有人打错“orang”怎么办?顺便提一句。确切的数据库不处理汽车和它们的组。它有各种各样的产品,很难分类......
  • @user1460744 尝试创建一个实体关系模型,这对于您的性能、可扩展性、查询等会好很多...就像您现在拥有它一样,您甚至没有使用索引如何你想。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多