powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как сделать Order By
24 сообщений из 24, страница 1 из 1
Как сделать Order By
    #32493455
Timujin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.
Хочу сделать поиск по выборке так, чтобы в гриде отображалась не только та запись, что мне нужна, но и соседние с ней (до и после нее), чтобы была возможность "пролистать" и выбрать то, что нужно.
Генерится селект, но ДО моей записи выбираются не те, что до нее по текущему Order By, а скорее всего, Skip делается не по полю Order By, а по ID
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT First  500  Skip  27283 
ID,REGNO,NUMTVR,NAMTVR,VES,VESP,NAMPROV,CENA1U,CENA2U,
CENA1D,CENA2D,CENA,XARAKT,KOLI,KARAT,NAMUSER,NEWBRL
FROM BRL 
WHERE (REGNO <  100250 )
Union
SELECT First  500 
ID,REGNO,NUMTVR,NAMTVR,VES,VESP,NAMPROV,CENA1U,CENA2U,
CENA1D,CENA2D,CENA,XARAKT,KOLI,KARAT,NAMUSER,NEWBRL
FROM BRL 
WHERE (REGNO >=  100250 )
ORDER BY  2 

То есть, запросы
Код: plaintext
1.
2.
3.
4.
SELECT First  500  Skip  27283 
ID,REGNO,NUMTVR,NAMTVR,VES,VESP,NAMPROV,CENA1U,CENA2U,
CENA1D,CENA2D,CENA,XARAKT,KOLI,KARAT,NAMUSER,NEWBRL
FROM BRL 
WHERE (REGNO <  100250 )

и
Код: plaintext
1.
2.
3.
4.
5.
SELECT First  500  Skip  27283 
ID,REGNO,NUMTVR,NAMTVR,VES,VESP,NAMPROV,CENA1U,CENA2U,
CENA1D,CENA2D,CENA,XARAKT,KOLI,KARAT,NAMUSER,NEWBRL
FROM BRL 
WHERE (REGNO <  100250 )
ORDER BY  2 

Возвращают разные наборы данных. Но я ведь указал ORDER BY 2 в запросе с UNION. Как заставить SKIP работать по ORDER BY в запросе с UNION?
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493608
Timujin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все гораздо хуже, чем я думал :-(((
Запрос
Код: plaintext
1.
2.
3.
SELECT first  3  REGNO FROM BRL
WHERE (REGNO >=  34025 )
ORDER BY  1 

возвращает
Код: plaintext
1.
2.
34025
>34026
>34027

а запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT first  3  REGNO FROM BRL
WHERE (REGNO <  34025 )
union
SELECT first  3  REGNO FROM BRL
WHERE (REGNO >=  34025 )
ORDER BY  1 

возвращает
Код: plaintext
1.
2.
3.
4.
5.
13814 
>13913 
>13914 
>36612 
>100439
>114046

т.е. во втором запросе REGNO = 34025,34026,34027 потерялись!!!!!!!!!!!!!!!!!!!!
ЭТО ЧТО??????????
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493668
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UNION ALL
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493679
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UNION ALL
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493735
Timujin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
Не помогло. Я тут поэкспериментировал с запросами и сделал вывод, что при использовании UNION
Код: plaintext
1.
2.
3.
запрос1
UNION
запрос2
order by ...

Запросы делаются БЕЗ order by, а потом уже общая выборка сортируется по order by. Грустно это....
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493783
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так в стандарте записано.
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493803
Timujin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть никак мою проблему не решить?
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493829
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
частную проблему сортировки в юнионе решить можно примерно так

Код: plaintext
1.
2.
3.
select  1  orderby, field1, field2 from table1
UNION
select  2  orderby, field1, field2 from table2
order by orderby, field1
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493831
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну почему ж никак. Если уж больно хочется именно так извернуться, то напиши каждый из запросов в отдельной процедуре, а потом им (этим процедурам) делай UNION ALL.
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493846
Timujin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedd
Так у меня же и так всего 1 поле в запросе:
Код: plaintext
1.
2.
3.
4.
5.
SELECT first  3  REGNO FROM BRL
WHERE (REGNO <  34025 )
union
SELECT first  3  REGNO FROM BRL
WHERE (REGNO >=  34025 )
ORDER BY  1 

Или я чего-то не понял?
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493851
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2fedd: у него там first ... skip . Там нужно каждый из запросов сортировать отдельно.
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493864
Timujin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
Это я в курсе, но эти селекты генерятся по скриптам описания макетов для ввода данных. То есть, если любой юзер нажмет клавишу поиска, то будет сгенерировано 2 процедуры, которые потом надо будет убить, и чтобы имена процедур не повторялись, давать имя процедуре используя генератор. И в базе все время будут создаваться/удаляться процедуры. Не хотелось бы. Больше вариантов нет? Может кто-то еще чего подскажет?
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493876
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
select first  100  skip  200   1  orderby, field1, field2 from table1
UNION
select first  150  skip  250   2  orderby, field1, field2 from table2
order by orderby, field1


что, так не получица? каждый запрос отсортруется по своему, результат первого будет вначале, второго в конце (order by orderby, поле orderby для первого всегда = 1, для второго = 2)...

*** Ухожу с ПТ ***
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493879
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> сгенерировано 2 процедуры

кто вам предлагает генерировать процедуры налету? Мимопроходящий???

*** Ухожу с ПТ ***
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493899
Timujin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedd
Проблема не в этом. Проблема в том, что запросы
Код: plaintext
1.
2.
SELECT first  3  REGNO FROM BRL
WHERE (REGNO >=  34025 )
ORDER BY  1 

и
Код: plaintext
1.
SELECT first  3  REGNO FROM BRL
WHERE (REGNO >=  34025 )

возвращают РАЗНЫЕ наборы данных.
А при использовании юниона запросы не сортируются...
Правильно сказал
Мимопроходящий
2fedd: у него там first ... skip. Там нужно каждый из запросов сортировать отдельно

fedd
>кто вам предлагает генерировать процедуры налету?
А как база отнесется к тому, что будут генериться/удаляться в среднем по 4-8 процедур в секунду?
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493905
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дошло как до утки! тогда не знаю что делать! база к генерированию налету отнесется плохо.

*** Ухожу с ПТ ***
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493909
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как база отнесётся не знаю, но народ запишет автора такого решения в почётные члены BuRaTiNa's Club
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493914
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
надо написать пару универсальных процедур или много продерур на каждый случай. ;)

*** Ухожу с ПТ ***
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493920
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> эти селекты генерятся по скриптам описания макетов для ввода данных

я так понимаю, меняется в основном WHERE?

*** Ухожу с ПТ ***
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493952
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то, можно написать это всё одним запросом.

Код: plaintext
1.
2.
3.
SELECT REGNO FROM BRL
WHERE (REGNO > (SELECT FIRST  1  SKIP  3  REGNO FROM BRL WHERE REGNO <  34025  ORDER BY REGNO))
  AND (REGNO < (SELECT FIRST  1  SKIP  3  REGNO FROM BRL WHERE REGNO >  34025  ORDER BY REGNO DESC))
ORDER BY  1 


Пиво мне.
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493965
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пиво ему! а там баг был, между прочим - "подзапрос, зависящий только от параметров"! а 34025 - это параметр!

*** Ухожу с ПТ ***
...
Рейтинг: 0 / 0
Как сделать Order By
    #32493988
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Баг не в этом месте был.
А в запросе я ASC и DESC местами перепутал.
Должно быть так:
Код: plaintext
1.
2.
3.
SELECT REGNO FROM BRL
WHERE (REGNO > (SELECT FIRST  1  SKIP  3  REGNO FROM BRL WHERE REGNO <  34025  ORDER BY REGNO DESC))
  AND (REGNO < (SELECT FIRST  1  SKIP  3  REGNO FROM BRL WHERE REGNO >  34025  ORDER BY REGNO ASC))
ORDER BY  1 


Где моё пиво?
...
Рейтинг: 0 / 0
Как сделать Order By
    #32494171
Timujin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
Куда доставить пиво? Решение - СУПЕР!!!
...
Рейтинг: 0 / 0
Как сделать Order By
    #32494222
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Та ладно, я сейчас на обед схожу, выпью от твоего имени
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как сделать Order By
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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