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
Форумы портала PHP.SU :: Версия для печати :: Сортировка по релевантности mysql
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Сортировка по релевантности mysql

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

1. bt_corp - 04 Октября, 2014 - 23:12:36 - перейти к сообщению
Здравствуйте, помогите составить 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
2. Viper - 04 Октября, 2014 - 23:37:48 - перейти к сообщению
http://stackoverflow[dot]com/a/22371774/345874 может поможет.

PS! А не проще match against?
3. bt_corp - 05 Октября, 2014 - 00:09:37 - перейти к сообщению
Viper пишет:
http://stackoverflow[dot]com/a/22371774/345874 может поможет.

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


Да спасибо помогло, позже выложу пример.
4. bt_corp - 05 Октября, 2014 - 02:41:44 - перейти к сообщению
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

 

Powered by ExBB FM 1.0 RC1