Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2011, 21:37   #1
dan-leech
 
Регистрация: 09.08.2011
Сообщений: 4
По умолчанию Нулевой элемент вынести вверх запроса

можно ли сделать следующее:
что бы после запроса был id=0 вначале выдачи, а остальные отсортированы в обратном порядке (DESC)

делал так:
SELECT *
FROM `table1`
WHERE id = 0
UNION SELECT *
FROM `table1`
WHERE id > 0
ORDER BY id DESC
но сортировка идет по всему
dan-leech вне форума Ответить с цитированием
Старый 09.08.2011, 21:41   #2
dan-leech
 
Регистрация: 09.08.2011
Сообщений: 4
По умолчанию все просто

пока писал дошло, что в скобки надо второй селект с сортировкой поставить
SELECT *
FROM `table1`
WHERE id =0
UNION (

SELECT *
FROM `table1`
WHERE id >0
ORDER BY id DESC
LIMIT 0, 30
)

почему-то только с LIMIT работает

Последний раз редактировалось dan-leech; 09.08.2011 в 21:47.
dan-leech вне форума Ответить с цитированием
Старый 09.08.2011, 23:06   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если сильно извратиться и есть знание того что, id всегда меньше 1000000, то можно так (лишнее вычисляемое поле NegativId потянется)
Код:
SELECT CASE WHEN 'id'=0 THEN -1000000 ELSE -'id' END AS NegativId,*
  FROM `table1`
  ORDER BY 1
Насчет ORDER BY 1 для MySQL (используете кавычки - решил что MySQL) не уверен. 2-ой пост ваш не подойдет - UNION без объеденяющего ORDER BY в общем случае хаотично выдает данные
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 09.08.2011 в 23:24.
Аватар вне форума Ответить с цитированием
Старый 10.08.2011, 00:07   #4
dan-leech
 
Регистрация: 09.08.2011
Сообщений: 4
По умолчанию

Так не хочет вообще работать.
Да использую MySQL.

NegativId в таблице не должно присутствовать?

А можно поподробнее в чем хаотичность UNION заключается?
dan-leech вне форума Ответить с цитированием
Старый 10.08.2011, 00:23   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

NegativId - просто назвал так вычисляемое поле. В таблице быть не должно. А в чем заключается нежелание работать? Ошибку какую выдает? UNION без объединяющего ORDER BY дает строки в общем случае не упорядоченные, иногда может сортировка совпасть с желаемой, иногда нет. Опираться на вами предложенный вариант нельзя, если важна сортировка. Можно и так попробовать
Код:
SELECT U.*
  FROM (SELECT CASE WHEN 'id'=0 THEN -1000000 ELSE -'id' END AS NegativId,* FROM `table1`) AS U
  ORDER BY U.NegativId
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 10.08.2011 в 00:27.
Аватар вне форума Ответить с цитированием
Старый 10.08.2011, 00:23   #6
dan-leech
 
Регистрация: 09.08.2011
Сообщений: 4
По умолчанию

Спасибо!
Заработало так:
SELECT CASE WHEN `id` =0
THEN -1000000
ELSE - `id`
END id,short
FROM `table` ORDER BY 1

со звездочкой не хочет
dan-leech вне форума Ответить с цитированием
Старый 10.08.2011, 10:57   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Код:
select case id when 0 then 0 else 1 end as superid, id, * 
from t
order by superid, id desc
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать Элемент "список" на основе запроса вертикальным? d_adilet Microsoft Office Access 3 13.05.2011 07:25
Матрица. Посчитать количество строк, содержащих хотя бы один нулевой элемент Геля007 Общие вопросы C/C++ 0 02.06.2010 16:17
Вынести слова по маске SKth Microsoft Office Word 5 14.12.2009 22:37
Нулевой массив? mutabor Общие вопросы Delphi 2 08.12.2009 18:07
первый нулевой элемент массива shelest Помощь студентам 2 15.11.2009 12:38