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

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

1. dzheka3d - 14 Сентября, 2014 - 14:01:32 - перейти к сообщению
Доброго времени суток всем!
Есть у меня запрос, который кое как ищет похожие новости к статье, вот он:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. "SELECT `id`,`category_id`,( IF (`title` LIKE '%установка%', 60, 0)+ IF (`text` LIKE '%установка%', 10, 0)) AS `relevant`
  3. FROM `pictures`
  4. WHERE ( `imagename` LIKE '%установка%' OR `text` LIKE '%установка%'
  5. ORDER BY `relevant`"
  6.  


Все прекрасно работает, но есть один вопрос: как сделать, чтобы при сортировке, приоритет выборки был не только у тех статей, у которых больше релевантность но и у тех, у которых category_id равен 12

Например у меня полся вот такой вывод по вышеописанному запросу
----id----category_id---relevant ---
======================
--- 25--------10------------100-----
--- 36--------8--------------97-----
--- 17--------12-------------90-----
--- 15--------12-------------85-----
--- 29--------11-------------76-----

Но нужно, чтобы сортировка была следующей:
----id----category_id---relevant ---
======================
--- 17--------12-------------90-----
--- 15--------12-------------85-----
--- 25--------10------------100-----
--- 36--------8--------------97-----
--- 29--------11-------------76-----

т.е. Первым делом выводим релевантные статьи из категории 12, а уже после этого остальные
2. tuareg - 14 Сентября, 2014 - 17:25:45 - перейти к сообщению
Как-то так
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT `id`,`category_id`,( IF (`title` LIKE '%установка%', 60, 0)+ IF (`text` LIKE '%установка%', 10, 0)) AS `relevant`
  3. FROM `pictures`
  4. WHERE ( `imagename` LIKE '%установка%' OR `text` LIKE '%установка%'
  5. ORDER BY `category_id`=12,`relevant`
  6.  

Если не поможет, извращаться дальше с if в ORDER by
3. Sail - 15 Сентября, 2014 - 08:57:03 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. ORDER BY FIELD(`category_id`, 12) DESC,`relevant` DESC

Так вот точнее будет Улыбка
4. dzheka3d - 16 Сентября, 2014 - 00:27:11 - перейти к сообщению
Точно, работает, спасибо ;)

 

Powered by ExBB FM 1.0 RC1