2016-01-12 2 views
-1

Пожалуйста, не оценивайте мой вопрос, потому что я новичок в MySQL. Мой вопрос;Как получить наивысшие совпадающие записи сначала из запроса select mysql

У меня есть таблица с именем 'item', и она имеет 'id', 'timestamp', 'title' колонны. считают, что таблица имеет следующие записи в указанном порядке (id, timestamp, title).

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 Аква М2 бренд newSony мобильный phone

103, 2016-01-12 12:27:30, PSP 2 sony бренд new

100, 2016-01-12 12:26:30, sony BRAVIA 32" ЖК-телевизор

+1

Может видеть матче против индекса с полнотекстового - но остерегайтесь его ограничения слишком – Strawberry

+0

Я думаю, вы поняли, что переполнение стека для – Strawberry

ответ

1

я нашел ответ. Сначала сделайте свой индекс столбцов «Полный текст». Затем используйте следующий запрос.

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

вы можете попробовать запрос, как этот

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

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