Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хитрая сортировка 
V
    Опции темы
Rodman
Дата 10.10.2007, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Дароф. 

есть таблица

-----------------
ProjectList
***********
ID
NameProject
StatusProject (FK)
..........
-----------------

и таблица-справочник
-----------------
StatusList
**********
ID
NameStatus
----------------

так вот в статусе есть записи типа:
1. Начальная стадия
2. Разработка
3. Завершающая.
4. Закрыт
5. Закрыт. Оплачен.


так вот мне нужно отсортировать данные так чтобы проекты со статусом Закрыт. Оплачен. были вверху...  знаю что вы можете сразу предложить - сортировать по коду... но не факт что коды будут такие...

т.к. слова "Оплачено" нигде кроме как в нужном варианте нет, то я предполагаю что как то искать, но не могу понять как...


Как поступить???

Сенкс
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Akella
Дата 10.10.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



добавь ещё одно поле в справочник

Добавлено через 25 секунд
Код

select p.id, p.NameProject from ProjectList p
left join
StatusList s on s.id = p.StatusProject
order by s.orderfield

PM MAIL   Вверх
Rodman
Дата 10.10.2007, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



не понял!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Akella
Дата 10.10.2007, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



ну добавляешь в справочник поле ещё одно, по которому будешь сортировать в дальнейшем
PM MAIL   Вверх
Rodman
Дата 10.10.2007, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



это не выход... юзер может удалить любой статус и потом добавить новый и потом добавить новый и эта нумерация легко собьется!!!

хотя возможно добавить поле в котором пользователь будет вводить уровень статуса в виде циферки и от нее отталкиваться!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Akella
Дата 10.10.2007, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



сначала делаешь выборку, после выборки срабатывает условие сортировки

Код

select p.id from phones p
left join apart a on a.id = p.id_apart
order by a.input_date


Добавлено через 1 минуту и 30 секунд
тогда можно попробовать запихнуть в хранимую процедуру, где сначала вывести в итог с пом. suspend нужные записи, а потом и всё остальное

Добавлено через 1 минуту и 57 секунд
к сожалению ты не указал СУБД
PM MAIL   Вверх
Deniz
Дата 11.10.2007, 04:56 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Rodman
1. Запретить пользователю редактировать справочник StatusList.
2. Добавить поле(not null) для порядка сортировки по совету Akella, сделать уникальный индекс по нему и назначить ответственного(лучше одного) за ведение справочника, остальным на справочник read only.
Если более подробно опишешь, зачем справочник и как он может меняться, может будут другие идеи.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
pseud
Дата 16.10.2007, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Код

select
  *
from
  ProjectList pl
  inner join StatusList sl on sl.id = pl.StatusProject
where
  sl.NameStatus = 'Закрыт. Оплачен.'
union
select
  *
from
  ProjectList pl
  inner join StatusList sl on sl.id = pl.StatusProject
where
  sl.NameStatus <> 'Закрыт. Оплачен.'




--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
pseud
Дата 16.10.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



или так
Код

select
  pl.*,
  sl.*,
  case when sl.NameStatus = 'Закрыт. Оплачен.' 
          then -1
          else sl.id
          end order_field                
from
  ProjectList pl
  inner join StatusList sl on sl.id = pl.StatusProject
order by
  oder_field


в расчете что в таблице StatusList поле id больше нуля

да и кстати я вещде пишу "=", а надо бы видимо:
Код

upper(sl.NameStatus) like upper('%оплачен%')



--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Rodman
Дата 25.10.2007, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Цитата(pseud @ 16.10.2007,  13:49)
Код

select
  *
from
  ProjectList pl
  inner join StatusList sl on sl.id = pl.StatusProject
where
  sl.NameStatus = 'Закрыт. Оплачен.'
union
select
  *
from
  ProjectList pl
  inner join StatusList sl on sl.id = pl.StatusProject
where
  sl.NameStatus <> 'Закрыт. Оплачен.'


попробовал этот способ - не получается... выводит все равно все - как будто обычным селектом.

а вот следующий метод не совсем пока понял (зачем там -1???)... щас буду разбирать!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
RinOSpro
Дата 25.10.2007, 09:09 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Можешь через локап

Код

  твоятаблица.DataSet.Locate('Твоя таблица', 'Закрыт. Оплачен', LocOpt);
  Id :=  твоятаблица.DataSet.FieldByName('id').AsInteger;


Добавлено через 1 минуту и 25 секунд
этим ты узнаешь id а потом по id что хочешь то и делаешь.
  Вверх
Rodman
Дата 25.10.2007, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



по ID не подходит! тут по текстовому полю надо!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
pseud
Дата 25.10.2007, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



1.
Цитата(Rodman @  25.10.2007,  08:36 Найти цитируемый пост)
попробовал этот способ - не получается... выводит все равно все - как будто обычным селектом.


попробуй вместо union команду union all

2.
Цитата(Rodman @  25.10.2007,  08:36 Найти цитируемый пост)
а вот следующий метод не совсем пока понял (зачем там -1???)... щас буду разбирать!

это чтобы 
Код

order by
  oder_field

записи с "-1" вывел первыми


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Rodman
Дата 25.10.2007, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Цитата(pseud @  25.10.2007,  13:47 Найти цитируемый пост)
команду union all

ну вот...

Сенку...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0578 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.