请不要低估我的问题,因为我是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"液晶电视
答案 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
匹配次数最多的项目将位于列表顶部