2013-02-17 4 views
0

Мне нужен php для отображения результатов из базы данных с наибольшим количеством результатов.Показать результаты с большинством совпадений

у меня есть:

foreach($keywords as $key=>$keyword) { 
     $where .= "`title` LIKE '%$keyword%'"; 
     if ($key != ($total_keywords - 1)) { 
     $where .= " OR "; 
     } 
    } 


$results = "SELECT * FROM topics WHERE $where"; 

Так что, если кто-то искал

"Как начать огонь"

Было бы показывать

  1. как начать пожар
  2. огонь начать
  3. как
  4. начало

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

+1

Действительно вам нужно сделать некоторое чтение на [полный текст искания] (http://dev.mysql.com/doc/refman/5.0/ ru/fulltext-search.html) и оценка релевантности. –

+0

Лучше добавить заказ в свой mysql-запрос .. и оставить PHP только для обработки результата. – Broncha

ответ

0

У меня была аналогичная проблема, прежде чем там, где полный поиск текста не был вариантом, и хотя это гораздо более медленный подход, он, похоже, хорошо работает для моих нужд. В принципе, UNION каждый из ваших результатов, как это и использовать COUNT для подсчета количества результатов:

SELECT Title, COUNT(*) as cnt 
FROM (
    SELECT * FROM Topics WHERE Title LIKE '%How%' 
    UNION ALL 
    SELECT * FROM Topics WHERE Title LIKE '%to%' 
    UNION ALL 
    SELECT * FROM Topics WHERE Title LIKE '%start%' 
    UNION ALL 
    SELECT * FROM Topics WHERE Title LIKE '%fire%' 
) t 
GROUP BY Title 
ORDER BY 2 DESC 

Вот является Fiddle.

И вот результаты:

TITLE    CNT 
How to start fire 4 
to fire start  3 
How to    2 
start    1 
+0

Хотя это не «практический» способ сделать это, он по-прежнему работает как шарм. Это удержит меня, пока я не узнаю полный текст или что-то еще. Благодаря! это избавило меня от времени. – user2067005

+0

@ пользователь2067005 - не мог согласиться больше. В моем случае я не мог реализовать полнотекстовый поиск на db клиента, так что это было обходным решением, о котором я думал. Удачи! – sgeddes

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