MySQL Select - 按多个OR运算符的最佳匹配排序

时间:2015-05-01 15:33:44

标签: php mysql sorting select

我有一个问题:

$get_co = 'example';
$get_co_domain = 'example.com';

$getmerid = mysql_query("SELECT id,title,domain,name,alternative_name,company_name,trading_name FROM companies 
WHERE (title = '$get_co')
OR (domain = '$get_co_domain')
OR (name = '$get_co')
OR (alternative_name = '$get_co')
OR (company_name = '$get_co')
OR (trading_name  = '$get_co')
LIMIT 0, 1");

在我的表中,假设我有两个标题为'example'的条目,但域名为'example.com'和'example.co.uk'。

目前,由于LIMIT,它只会匹配其中一个,但它可能会选择'example.co.uk'行。

有没有办法可以按照评分类型的方式对结果进行排序,以便根据某些标准(即域名或公司名称)选择最相关的结果。

2 个答案:

答案 0 :(得分:1)

仅供参考,您的查询可以按如下方式重写:

SELECT id
     , title
     , domain
     , name
     , alternative_name
     , company_name
     , trading_name 
  FROM companies 
 WHERE '$get_co' IN(title,name,alternative_name,company_name,trading_name)
    OR domain = '$get_co_domain'
 ORDER
    BY id
 LIMIT 0, 1

答案 1 :(得分:1)

对于快速模糊文本搜索,我建议使用名为 Jaro / Winkler 的算法。几年前我自己遇到过这种问题 - 这是我写的一篇博文。 http://dannykopping.com/blog/fuzzy-text-search-mysql-jaro-winkler

您可以根据0 - 100%

的“相似性”因素对结果进行排序