2015-05-01 2 views
1

У меня есть запрос:MySQL Select - Сортировка лучшее совпадение с несколькими OR операторами

$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"); 

В моей таблице, позволяет сказать, что у меня есть 2 записей как с названием «например», но домены «пример .com 'и' example.co.uk '.

В настоящее время он будет соответствовать только одному из них из-за LIMIT, но он может выбрать строку example.co.uk.

Есть ли способ сортировать результаты по методу скоринга таким образом, чтобы он выбирал наиболее релевантные на основе определенных критериев, то есть домена или company_name.

+0

Вы имеете в виду, как найти ближайший матч строки? – infomaniac

+1

Да, как говорит @infomaniac, определите «релевантность». – Strawberry

+0

не совсем уверен, что вы подразумеваете под этим? извините, вы можете немного разобраться? –

ответ

1

Просто FYI, ваш запрос можно переписать следующим образом:

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 
+0

спасибо за головы! –

1

Для быстрого нечеткого поиска текста, я бы рекомендовал использовать алгоритм, называемый Яро/Winkler. Несколько лет назад я столкнулся с такой проблемой - вот блог, который я написал. http://dannykopping.com/blog/fuzzy-text-search-mysql-jaro-winkler.

Вы сможете сортировать результаты, основанные на «подобие» фактор от 0 - 100%

Смежные вопросы