Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сортировка по релевантности mysql

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Помогите составить запрос
bt_corp
Отправлено: 04 Октября, 2014 - 23:12:36
Post Id



Гость


Покинул форум
Сообщений всего: 71
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Здравствуйте, помогите составить MYSQL запрос. Собственно запрос частично есть и он работает для первого слова, нужно составить запрос для остальных слов (может быть 1,2,3,4 слова)

Для слова "hd"

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT searches
  3. FROM related_searches
  4. WHERE 1=1
  5. AND searches LIKE '%hd%'
  6. ORDER BY CASE
  7. WHEN searches LIKE 'hd' THEN 0
  8. WHEN searches LIKE 'hd %' THEN 1
  9. WHEN searches LIKE 'hd%' THEN 2
  10. WHEN searches LIKE '% hd%' THEN 3
  11. ELSE 4
  12. END
  13. LIMIT 10
  14.  


Для фразы: hd video

Как создать релевантную сортировку, подобно первому запросу ?

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT searches
  3. FROM related_searches
  4. WHERE 1=1
  5. AND searches LIKE '%hd%'
  6. AND searches LIKE '%video%'
  7. LIMIT 10
  8.  


Ожидаемый результат от такого поиска (примерно)

hd video
hd video 720
hd video online
hd video1080
hd videos
hd videos online


-----
Программист, это - такой человек, который сначала много думает, чтобы потом ничего не делать!
 
 Top
Viper
Отправлено: 04 Октября, 2014 - 23:37:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




http://stackoverflow[dot]com/a/22371774/345874 может поможет.

PS! А не проще match against?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
bt_corp
Отправлено: 05 Октября, 2014 - 00:09:37
Post Id



Гость


Покинул форум
Сообщений всего: 71
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Viper пишет:
http://stackoverflow[dot]com/a/22371774/345874 может поможет.

PS! А не проще match against?


Да спасибо помогло, позже выложу пример.


-----
Программист, это - такой человек, который сначала много думает, чтобы потом ничего не делать!
 
 Top
bt_corp
Отправлено: 05 Октября, 2014 - 02:41:44
Post Id



Гость


Покинул форум
Сообщений всего: 71
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT searches
  2. FROM related_searches
  3. WHERE 1=1
  4. AND searches LIKE '%hd%'
  5. AND searches LIKE '%video%'
  6. AND searches LIKE '%online%'
  7. ORDER BY
  8. (CASE
  9. WHEN searches LIKE 'hd' THEN 0
  10. WHEN searches LIKE 'hd %' THEN 1
  11. WHEN searches LIKE 'hd%' THEN 2
  12. WHEN searches LIKE '% hd%' THEN 3
  13. ELSE 4 END
  14. ) +
  15. (CASE
  16. WHEN searches LIKE 'video' THEN 0
  17. WHEN searches LIKE 'video %' THEN 1
  18. WHEN searches LIKE 'video%' THEN 2
  19. WHEN searches LIKE '% video%' THEN 3
  20. ELSE 4 END
  21. )+
  22. (CASE
  23. WHEN searches LIKE 'online' THEN 0
  24. WHEN searches LIKE 'online %' THEN 1
  25. WHEN searches LIKE 'online%' THEN 2
  26. WHEN searches LIKE '% online%' THEN 3
  27. ELSE 4 END
  28. )
  29. LIMIT 10


Но Лучше так!

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT searches
  2. FROM related_searches
  3. WHERE 1=1
  4. AND searches LIKE '%hd%'
  5. AND searches LIKE '%video%'
  6. AND searches LIKE '%online%'
  7. ORDER BY CASE
  8. WHEN searches LIKE 'hd video online' THEN 0
  9. WHEN searches LIKE 'hd video online %' THEN 1
  10. WHEN searches LIKE 'hd video online%' THEN 2
  11. WHEN searches LIKE '% hd video online%' THEN 3
  12. ELSE 4 END
  13. LIMIT 10

(Отредактировано автором: 05 Октября, 2014 - 19:57:02)



-----
Программист, это - такой человек, который сначала много думает, чтобы потом ничего не делать!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB