Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / И снова сортировка / 21 сообщений из 21, страница 1 из 1
15.08.2007, 11:59
    #34728858
Sergiuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
Добрый день, заранее извиняюсь за повторение по поводу сортировки но не нашел по форуму то что искал.
Есть таблица с полем NOMER - char(10) состоит из первые четыре символа абривиатура определенной группы потом дефис и 4 цифры
Результат который выдает мне сервер типа такого
RASH-1
RASH-10
...
RASH-2
RASH20
....
RASH-30
и т.д.
Помогите плз составить запрос что бы результат был таким:
RASH-1
RASH-2
RASH-3
....
RASH-10
....
RASH-20
и т.д.

Заранее благодарен
(а также прилагаю базу с такой табличкой)
...
Рейтинг: 0 / 0
15.08.2007, 12:02
    #34728874
Di_LIne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
Код: plaintext
order by NOMER
не помогает?
...
Рейтинг: 0 / 0
15.08.2007, 12:03
    #34728879
Di_LIne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
Виноват! Поперек парАвоза бегу...
...
Рейтинг: 0 / 0
15.08.2007, 12:07
    #34728900
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
Sergiuz S> Помогите плз составить запрос что бы результат был таким:
S> RASH-1
S> RASH-2
S> RASH-3
S> ....
S> RASH-10
S> ....
S> RASH-20
S> и т.д.не запрос надо переписывать, а хранить правильно
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
15.08.2007, 12:37
    #34729032
artemana
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
1. Использовать UDFs которые "выкусывают" префикс и число из вашей строки. В запросе сортировать по двум частям - префикс и число. Вместо UDFs можно ХП.
2. Хранить вместо "RASH-1" - "RASH-01".
...
Рейтинг: 0 / 0
15.08.2007, 12:44
    #34729074
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
1.хранить и показывать как
RASH-00001
RASH-00002
...
RASH-99999
тогда обычный ордер бай и вуаля.
2.
order by substr(NOMER,1,5), cast(substr(NOMER,6,4) as integer)
3. сделать правильно: номер в одном поле, префикс в другом.
...
Рейтинг: 0 / 0
15.08.2007, 13:48
    #34729372
Пьяный Винни-Пух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
Ivan_Pisarevsky3. сделать правильно: номер в одном поле, префикс в другом.

А мне что-то каатся, что это всё равно -->(_!_)--> Мне каатся, что вхождение в некоторые группы по науке принято было хранить в виде отношения "группы" с атрибутикой, в том числе и полным наименованием, и аббревиатурным если надо, и референса на неё от входящих объектов. Ну или m:n. И джойниться и сортировать по чём хош типа посегментно. Но я понимаю, нынче это не модно - не к чему будет прикручивать машину Тьюринга (С).
...
Рейтинг: 0 / 0
15.08.2007, 14:06
    #34729451
Седов А.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
2 Sergiuz

присоединюсь к
Пьяный Винни-Пух

Первую нормальную форму ещё никто не отменял.
Скорее всего её применение в этом случае оправдано.
...
Рейтинг: 0 / 0
15.08.2007, 14:07
    #34729460
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
Пьяный Винни-Пух Ivan_Pisarevsky3. сделать правильно: номер в одном поле, префикс в другом.

А мне что-то каатся, что это всё равно -->(_!_)--> Мне каатся, что вхождение в некоторые группы по науке принято было хранить в виде отношения "группы" с атрибутикой, в том числе и полным наименованием, и аббревиатурным если надо, и референса на неё от входящих объектов. Ну или m:n. И джойниться и сортировать по чём хош типа посегментно. Но я понимаю, нынче это не модно - не к чему будет прикручивать машину Тьюринга (С).Я нечто подобное ликвидировал, когда выбрасывал старинную прогу на фоксбэйзе у себя на складе, как-то рубанул ея под корешок и дело с концом. На место таких составных естественно-искусственных ключей просто пришел трехуровневый справочник и все стало чинно-благородно, без избыточности и необходимости сортировок/группировок по кускам полей.
Посоветовать автору поменять всю структуру таблиц и привести в похожесть с НФБК?
Ну можно, конечно, только мне кажется он будет от этого не в восторге...
...
Рейтинг: 0 / 0
15.08.2007, 15:53
    #34729908
Sergiuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
Седов А.2 Sergiuz

присоединюсь к
Пьяный Винни-Пух

Первую нормальную форму ещё никто не отменял.
Скорее всего её применение в этом случае оправдано.

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

У меня есть еще один вопрос на одном из топиков форума я нашел такой вариант
select * from tbl order by substring ('00000' || n from (char_length(n)) for 7)
не подскажите структуру функции substring в firebird а то я что то мало понял из справки на ibase.ru
Заранее спасибо
...
Рейтинг: 0 / 0
15.08.2007, 16:15
    #34729995
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
Sergiuz
с одной стороны согласен что оно оправдано только вот вопрос но при это возрастает количество работы к пример поиск товара по номеру мне придется вырезать из строки номера аббревиатуру и номер делать чуть ли не двойную работу только по поиску. А работа с номером товара у меня чуть ли не в каждой форме приложения.

Эт ты сейчас делаеш двойную работу!!!!!!!
И это как надо читать, дабы понять ровно наоборот.
...
Рейтинг: 0 / 0
15.08.2007, 16:22
    #34730020
Седов А.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
2 Sergiuz

Если Вы точно знаете, что денормализация оправдана(в чём я для справочника товаров ОЧЕНЬ сильно сомневаюсь) то нормального выхода нет. Либо добавляйте лидирующие нули, либо заводите дополнительное поле для сортировки.
Однако, я не вижу причины не дать пользователю конструкцию вида
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select 
  tg.name||'-'||t.id as articul, 
  tg.name, t.id, .... 
from 
  tovar_groups tg, 
  tovars t
where 
  t.group_id=tg.id
order by  2 , 3 

За такой подход говорит ещё и то, что за группой могут быть закреплены характеристики посложнее трёх букв(например место хранения, температурный режим, порядок упаковки при отгрузке и ещё куча всякой хрени, которая теоретически может понадобиться при поиске по товару). И тогда вашей схеме придёт маленький пушной зверёк из шести букв : -))

Не хотите в две таблицы — складывайте в одну, но с дополнительным полем, которое позволит узнать, что это — товар или группа. Это те же зайцы. Кому как больше нравится.
...
Рейтинг: 0 / 0
15.08.2007, 17:02
    #34730226
Sergiuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
2 Седов А.
Спасибо за советы и понимания (в не которых вопрос я очень много допускал ошибки, потому как вторые сутки не сплю)

На сколько как для меня лучшим вариантом будет добавить дополнительное поле

Спасибо еще Раз
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
07.12.2011, 16:29
    #37563425
Wild Pointer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
SergiuzУ меня есть еще один вопрос на одном из топиков форума я нашел такой вариант
select * from tbl order by substring ('00000' || n from (char_length(n)) for 7)
не подскажите структуру функции substring в firebird а то я что то мало понял из справки на ibase.ru
Заранее спасибо

Сейчас попробовал это вариант - работает!!!!
Так что буду юзать.
...
Рейтинг: 0 / 0
07.12.2011, 16:50
    #37563473
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
доку почитай, про lpad например, партизанин-некрофил. :)
...
Рейтинг: 0 / 0
07.12.2011, 19:46
    #37563865
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
Wild PointerТак что буду юзать.И еще один попробуйте (для ФБ 2.5).
DDL:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
recreate table tns(f int); -- drop dependencies if any
commit;
set term ^;
execute block as
begin
  execute statement 'drop collation ns_coll;';
  when any do begin end
end^
set term ;^
commit;
create collation ns_coll for utf8 from unicode case insensitive 'NUMERIC-SORT=1';
recreate table tns(s varchar(50) character set utf8 collate ns_coll);
commit;

delete from tns;
insert into tns values('rash-100');
insert into tns values('rash-1');
insert into tns values('rash-20');
insert into tns values('rash-2');
insert into tns values('rash-3');
insert into tns values('rash-300');
insert into tns values('rash-30');

insert into tns values('RAsh-110');
insert into tns values('RASH-5');
insert into tns values('RAsh-25');
insert into tns values('RASH-11');
insert into tns values('RAsh-111');
commit;

Код: sql
1.
select * from tns order by s

Result:Srash-1rash-2rash-3RAsh-5RAsh-11rash-20RAsh-25rash-30rash-100RAsh-110RAsh-111rash-300
...
Рейтинг: 0 / 0
07.12.2011, 23:37
    #37564135
vvm
vvm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
Таблоид,
+ 500! :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
26.10.2015, 12:10
    #39086649
KonstFB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
Встала похожая проблема, но поле не utf8, а win1251.

В этом случае как правильно указать collaction для данной кодировки ?!

Код: plsql
1.
create collation ns_coll for utf8 from unicode case insensitive 'NUMERIC-SORT=1';
...
Рейтинг: 0 / 0
26.10.2015, 12:18
    #39086663
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
...
Рейтинг: 0 / 0
26.10.2015, 12:43
    #39086704
KonstFB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
Просьба не убивать сразу!

create collation myCollW for win1251 from unicode case insensitive 'NUMERIC-SORT=1';

НО, при попытке выполнить - выдает ошибку, что win1251 не определен?!

Люди памагите! )
...
Рейтинг: 0 / 0
26.10.2015, 12:52
    #39086717
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова сортировка
KonstFBЛюди памагите! )
Обломись. Win1251 это legacy charset, он не поддерживает кастомные коллейты вообще.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / И снова сортировка / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]