如何首先获取 select 查询 mysql 的最高匹配记录

How to get highest matching records first of select query mysql

请不要低估我的问题,因为我是 MySQL 的新手。我的问题是;

我有一个名为 'item' 的 table,它有 'id''timestamp''title' 列。 考虑 table 按上述顺序(id、时间戳、标题)包含以下记录。

100, 2016-01-12 12:26:30, sony bravia 32" Lcd TV

103, 2016-01-12 12:27:30, PSP 2 sony brand new

108, 2016-01-12 12:28:30, Xperia Aqua M2 brand new Sony mobile phone

帮我创建一个 SQL 查询来搜索 'title' 列,首先将结果显示为最匹配的记录。

As example, if we search "new Sony xperia phone" it should return results as following order.

108, 2016-01-12 12:28:30, Xperia Aqua M2 brand new Sony mobile phone

103, 2016-01-12 12:27:30, PSP 2 sony brand new

100, 2016-01-12 12:26:30, sony bravia 32" Lcd TV

Because highest matching record should come first.

108, 2016-01-12 12:28:30, Xperia Aqua M2 品牌 new Sony 手机 phone

103, 2016-01-12 12:27:30, PSP 2 sony 品牌 new

100, 2016-01-12 12:26:30, sony bravia 32" 液晶电视

你可以尝试这样的查询

SELECT 
    *, 
    if((CHAR_LENGTH(title) - CHAR_LENGTH(replace(lower(title), 'new','')))>0,1,0) +
    if((CHAR_LENGTH(title) - CHAR_LENGTH(replace(lower(title), 'sony','')))>0,1,0) +
    if((CHAR_LENGTH(title) - CHAR_LENGTH(replace(lower(title), 'xperia','')))>0,1,0) +
    if((CHAR_LENGTH(title) - CHAR_LENGTH(replace(lower(title), 'phone','')))>0,1,0) as matches
FROM item
ORDER BY matches DESC

匹配次数最多的项目将排在列表顶部

SQLFIDDLE

我找到了答案。首先使您适当的列 'Full Text' 成为索引。然后使用以下查询。

SELECT * FROM table_name WHERE MATCH(`column_name`) AGAINST('your searching keywords');