【问题标题】:How to get highest matching records first of select query mysql如何在选择查询mysql中首先获得最高匹配记录
【发布时间】:2016-01-12 07:15:48
【问题描述】:

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

我有一个名为'item' 的表,它有'id''timestamp''title' 列。 考虑该表按上述顺序具有以下记录(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' 列,该列首先将结果显示为最高匹配记录。

例如,如果我们搜索 "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品牌newSony手机phone

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

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

【问题讨论】:

  • 也许会看到 MATCH AGAINST 带有全文索引 - 但也要注意它的局限性
  • 我想你误解了 Stack Overflow 的用途

标签: mysql search select-query


【解决方案1】:

我找到了答案。首先将您的相应列设为“全文”索引。然后使用以下查询。

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

【讨论】:

    【解决方案2】:

    你可以试试这样的查询

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      • 2013-02-09
      • 1970-01-01
      • 2019-06-10
      • 2018-10-05
      • 1970-01-01
      相关资源
      最近更新 更多