0

我有以下表结构 [id - title - tag - ..] 我想实现以下目标:

如果表中有一条标题为“I love my job and it is my hobby”的记录 如果提交的查询包含句子中的两个单词,则应选择该句子。例如查询“爱情爱好”。它应该给我上面的标题,而不是例如“我爱我的工作”。至少是先匹配查询关键字的单词多的句子,然后是匹配查询关键字的单词少的句子。

如何在表格的标题列上进行此搜索?

如果解释不清楚,我深表歉意......非常乐意帮助澄清。

谢谢你们

4

4 回答 4

2

尝试这个 :

SELECT title FROM your_table WHERE title LIKE '%love%' AND title LIKE '%hobby%'

于 2012-07-31T07:05:28.293 回答
1

查看 mysql 内置的全文搜索功能。在布尔模式下,您可以将查询转换为+love +hobby并返回结果,而无需进行全表扫描。请注意,这仅适用于 myisam 表,可能希望将索引数据移出主表,因为 myisam 不支持外键或事务之类的东西。

对于更高级的自由文本索引,您可以尝试sphinx(也有 mysql 外观界面)或solr

于 2012-07-31T07:10:00.710 回答
1

如果您使用的是 MyISAM 或 innoDB,则可以使用 MySQL 全文搜索:

SELECT * FROM table_name WHERE MATCH (title) AGAINST ('love hobby' IN BOOLEAN MODE);

它还将搜索单个单词。

阅读:https ://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

于 2012-07-31T07:10:42.427 回答
0

你也可以使用 MySQLREGEXP

SELECT title FROM table WHERE title REGEXP ' love .+ hobby';

如果您将其作为单个字符串,请尝试:

SELECT title FROM table WHERE title REGEXP REPLACE('love hobby', ' ', '.+ ');
于 2012-07-31T07:09:26.710 回答