Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: ORDER BY: Зафиксировать определенный город в начале списка
 
 автор: Richard Ferlow   (20.03.2011 в 20:06)   письмо автору
 
 

Есть некая таблица типа

id cityname displayorder


id - autoincrement

Записи внутри вида

1 Москва 1
2 Владивосток 19
3 Житомир 5

В стандартном виде сортирую по displayorder при выводе.
Однако иногда нужно чтобы первой выводилась конкретная запись, а оставшиеся согласно displayorder выводились. Можно это как-то одним запросом сделать ?

В голову пришел пока только способ в два запроса(один на запрос первого элемента, второй на оставшиеся), но может быть как-то лучше можно сделать ?

  Ответить  
 
 автор: cheops   (20.03.2011 в 20:11)   письмо автору
 
   для: Richard Ferlow   (20.03.2011 в 20:06)
 

Можно. ORDER BY позволяет сортировать по нескольким столбцам, в том числе сурогатным, нужно только подходящий столбец подготовить. По какому условию отбираются города, которые нужно поместить в начало (чтобы можно было пример привести)?

  Ответить  
 
 автор: Richard Ferlow   (20.03.2011 в 20:16)   письмо автору
 
   для: cheops   (20.03.2011 в 20:11)
 

Пользователь зашел на сайт, определило что он из Владивостока - соответственно Владивосток при выводе первым должен выводиться, а остальные города согласно displayorder. Такой пример имеете ввиду ?

  Ответить  
 
 автор: cheops   (20.03.2011 в 20:20)   письмо автору
 
   для: Richard Ferlow   (20.03.2011 в 20:16)
 

Тогда можно поступить как-то так
SELECT id cityname displayorder
FROM tbl
ORDER BY IF(id=2, 0, 1), displayorder

  Ответить  
 
 автор: Richard Ferlow   (20.03.2011 в 20:23)   письмо автору
 
   для: cheops   (20.03.2011 в 20:20)
 

Спасибо.

Но не могли бы пояснить как работает конструкция

IF(id=2, 0, 1) ?

  Ответить  
 
 автор: cheops   (20.03.2011 в 20:26)   письмо автору
 
   для: Richard Ferlow   (20.03.2011 в 20:23)
 

Если первое условие равно TRUE возвращается второй параметр, если FALSE - третий. Суть в том, чтобы при нахождении города с id равным 2 выдать число меньше, чем для остальных городов. Сортировка сначала идет по первому столбцу, который зафиксирует этот город вверху, а потом по второму столбцу, что позволит сортировать остальные города обычным порядком.

  Ответить  
 
 автор: Richard Ferlow   (20.03.2011 в 22:10)   письмо автору
 
   для: cheops   (20.03.2011 в 20:26)
 

Спасибо, буду пробовать.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования