powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / И снова сортировка
21 сообщений из 21, страница 1 из 1
И снова сортировка
    #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
И снова сортировка
    #34728874
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
order by NOMER
не помогает?
...
Рейтинг: 0 / 0
И снова сортировка
    #34728879
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виноват! Поперек парАвоза бегу...
...
Рейтинг: 0 / 0
И снова сортировка
    #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
И снова сортировка
    #34729032
Фотография artemana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Использовать UDFs которые "выкусывают" префикс и число из вашей строки. В запросе сортировать по двум частям - префикс и число. Вместо UDFs можно ХП.
2. Хранить вместо "RASH-1" - "RASH-01".
...
Рейтинг: 0 / 0
И снова сортировка
    #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
И снова сортировка
    #34729372
Фотография Пьяный Винни-Пух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky3. сделать правильно: номер в одном поле, префикс в другом.

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

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

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

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

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

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

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

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

Эт ты сейчас делаеш двойную работу!!!!!!!
И это как надо читать, дабы понять ровно наоборот.
...
Рейтинг: 0 / 0
И снова сортировка
    #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
И снова сортировка
    #34730226
Фотография Sergiuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Седов А.
Спасибо за советы и понимания (в не которых вопрос я очень много допускал ошибки, потому как вторые сутки не сплю)

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

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

Сейчас попробовал это вариант - работает!!!!
Так что буду юзать.
...
Рейтинг: 0 / 0
И снова сортировка
    #37563473
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
доку почитай, про lpad например, партизанин-некрофил. :)
...
Рейтинг: 0 / 0
И снова сортировка
    #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
И снова сортировка
    #37564135
vvm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,
+ 500! :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
И снова сортировка
    #39086649
KonstFB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Встала похожая проблема, но поле не utf8, а win1251.

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

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

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

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

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


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