如何获得选择查询mysql的最高匹配记录

时间:2016-01-12 07:15:49

标签: mysql search select-query

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

我有一个名为'item'的表,它有'id''timestamp''title'列。 考虑该表具有以上顺序的记录(id,timestamp,title)。

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'列,该列首先显示结果为最高匹配记录。

  

例如,如果我们搜索"new Sony xperia phone"它应该返回   结果如下。

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
  

因为最高匹配记录应该首先出现。

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"液晶电视

2 个答案:

答案 0 :(得分:1)

我找到了答案。首先制作合适的专栏' Full Text'指数。然后使用以下查询。

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

答案 1 :(得分:0)

您可以尝试这样的查询

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