MySql: упорядочение результатов по количеству совпадений в столбце значений, разделенных пробелом

0

У меня есть таблица базы данных MySQL, в которой есть столбец "word" с разделительными знаками. Например:

one two three four five

Итак, учитывая вышеприведенную запись, я хочу найти другие записи, которые содержат одно или несколько значений, разделенных пробелами, и упорядочить результаты по большинству соответствующих совпадений. Как я могу добиться этого?

Например:

one two six seven eight
three nine ten eight seven
one two three six seven
one two three four ten
six seven eight nine ten

Я хотел бы вернуть следующее:

one two three four ten --4 matching values
one two three six seven --3 matching values
one two six seven eight --2 matching values
three nine ten eight seven --1 matching value

Это запрос, который я использую до сих пор:

SELECT * from MyTable WHERE words like '%one%' OR words like '%two%' OR words like '%three%' OR words like '%four%' OR words like '%five%'

Но это только выбирает результаты, которые разделяют одно или несколько слов. Как я могу отслеживать, сколько совпадений есть и заказать результаты в терминах?

Теги:

2 ответа

0

Вы можете взглянуть на реализацию полнотекстового поиска, например тип, описанный здесь.

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

Наслаждайтесь!

  • 0
    Спасибо за ответ, но это не то, что я ищу.
  • 0
    @ Джонс: почему бы и нет?
Показать ещё 1 комментарий
0

Я думаю, что нет простого и элегантного способа достижения этого. Мое решение таково:

SELECT MyTable.* FROM MyTable JOIN 
(SELECT row_id, COUNT(*) AS count
    FROM
        (
        SELECT row_id from MyTable WHERE words like '%one%'
        UNION
        SELECT row_id from MyTable WHERE words like '%two%'
        )
    GROUP BY row_id
) AS count_result
ON MyTable.row_id=count_result.row_id
ORDER BY count_result.count DESC

Ещё вопросы

Сообщество Overcoder
Наверх
Меню