如何首先获取 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
匹配次数最多的项目将排在列表顶部
我找到了答案。首先使您适当的列 'Full Text' 成为索引。然后使用以下查询。
SELECT * FROM table_name WHERE MATCH(`column_name`) AGAINST('your searching keywords');
请不要低估我的问题,因为我是 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
匹配次数最多的项目将排在列表顶部
我找到了答案。首先使您适当的列 'Full Text' 成为索引。然后使用以下查询。
SELECT * FROM table_name WHERE MATCH(`column_name`) AGAINST('your searching keywords');