Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];

Вниз

Номер по порядку...   Найти похожие ветки 

 
MakNik   (2005-10-18 11:13) [0]

Подскажите, пожалуйста, как в запросе прономеровать полученные строки по порядку?


 
Johnmen ©   (2005-10-18 11:16) [1]

А зачем?
Просто интересно...


 
Ega23 ©   (2005-10-18 11:32) [2]

Через временную таблицу с добавлением Identity(1,1).
Как один из вариантов.

З.Ы. Присоединяюсь к Johnmen ©   (18.10.05 11:16) [1]


 
evvcom ©   (2005-10-18 11:49) [3]


> Просто интересно...

По-моему, в WEB это используется довольно часто.


 
isasa ©   (2005-10-18 11:57) [4]

А зачем?
Динамически получить порядковый номер записи в выборке.


 
Slider007 ©   (2005-10-18 11:59) [5]

isasa ©   (18.10.05 11:57) [4]
RecNo ?


 
stone ©   (2005-10-18 12:01) [6]


> evvcom ©   (18.10.05 11:49) [3]
>
> > Просто интересно...
>
> По-моему, в WEB это используется довольно часто.

Для чего?


 
Johnmen ©   (2005-10-18 12:03) [7]


> isasa ©   (18.10.05 11:57) [4]
> А зачем?
> Динамически получить порядковый номер записи в выборке.


А зачем?


 
Ega23 ©   (2005-10-18 12:03) [8]

2 Slider007 ©   (18.10.05 11:59) [5]

>
> isasa ©   (18.10.05 11:57) [4]
> RecNo ?


Не у всех потомков TDataSet будет работать. У TQuery, например - не будет. У TRxQuery - будет работать, но если нет BLOB-полей в выборке.
Короче, будет работать у тех потомков TDataSet, которые на ActiveChanged полностью выобрку фетчат.


 
MOA ©   (2005-10-18 12:04) [9]

http://www.sql.ru/faq/faq_topic.aspx?fid=126
Удачи!


 
isasa ©   (2005-10-18 12:20) [10]

> Динамически получить порядковый номер записи в выборке.
А зачем?


Для печати порядкового номера на персонализируемой странице(direct mail). Если какой-нибудь урод уронит пачку, можно легко собрать по порядковам номерам.


 
Johnmen ©   (2005-10-18 12:27) [11]

>isasa ©   (18.10.05 12:20) [10]
>Для печати порядкового номера...

Для печати есть др.нормальные средства.

>...номера на персонализируемой странице(direct mail). Если какой-нибудь урод уронит пачку, можно легко собрать по порядковам номерам.

Не понял, это про что?

ЗЫ
Это обсуждение регулярно возникает.
Идеологически, данный номер не нужен (бесполезен). ИМХО.


 
isasa ©   (2005-10-18 12:37) [12]

Идеологически, данный номер не нужен (бесполезен). ИМХО.
Печать со слиянием - письма одного содержания с разними обращениями и адресами. Переменная информация - SQL выборка (в крайнем случае View).
Должны лежать в определенном порядке. В случае смешивания, должны легко идентифицироваться и раскладываться.

Ты еще предложи GUID на них печатать.


 
Sergey13 ©   (2005-10-18 12:45) [13]

2[12] isasa ©   (18.10.05 12:37)
>В случае смешивания, должны легко идентифицироваться и раскладываться
Для идентификации обычно используют нечто, что хранится. Для печати номер по порядку хранить не обязательно.


 
dmitry501 ©   (2005-10-18 12:55) [14]

isasa ©   (18.10.05 12:20) [10]
<offtop> Рекомендуемый способ отвечать на "direct mail"-
http://www.vertical-visions.com/_temp/postagepaid/index2.html
</offtop>


 
isasa ©   (2005-10-18 12:55) [15]

Для печати номер по порядку хранить не обязательно.

isasa ©   (18.10.05 11:57) [4]
Динамически получить порядковый номер записи в выборке.


А я о чем?


 
isasa ©   (2005-10-18 13:06) [16]

dmitry501 ©   (18.10.05 12:55) [14]
:)
Это проблемы заказчика и его клиента.


 
msguns ©   (2005-10-18 13:08) [17]

http://delphimaster.net/view/3-1129092338/

Такое впечатление, что некоторым Мастерам больше нечего делать, как навязывать всем подряд свое имхо


 
evvcom ©   (2005-10-18 13:39) [18]


> stone ©   (18.10.05 12:01) [6]
>
> > evvcom ©   (18.10.05 11:49) [3]
> >
> > > Просто интересно...
> >
> > По-моему, в WEB это используется довольно часто.
>
> Для чего?

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


 
Курдль ©   (2005-10-18 14:10) [19]


> Ega23 ©   (18.10.05 11:32) [2]
> Через временную таблицу с добавлением Identity(1,1).


Это что, шутка? 8-()

select number(),  T.* from TABLE_NAME T
select rownum,  T.* from TABLE_NAME T


 
Ega23 ©   (2005-10-18 14:16) [20]

Это что, шутка? 8-()

Нет, не шутка.
Что такое number() и rownum?


 
Курдль ©   (2005-10-18 14:17) [21]


> Что такое number() и rownum?


Я привел 2 рабочих запроса для Sybase и oracle. Неужели MS SQL не имеет аналога?


 
Ega23 ©   (2005-10-18 14:21) [22]


> Я привел 2 рабочих запроса для Sybase и oracle. Неужели
> MS SQL не имеет аналога?


Нет. А зачем?


 
Курдль ©   (2005-10-18 14:25) [23]


> Ega23 ©   (18.10.05 14:21) [22]
> Нет. А зачем?


Чтобы, как просил автор:

> ...в запросе прономеровать полученные строки по порядку


8-)


 
Ega23 ©   (2005-10-18 14:28) [24]


>
> Чтобы, как просил автор:


Через временную таблицу с добавлением поля Identity(1,1)
Чем плох вариант?


 
Курдль ©   (2005-10-18 14:31) [25]


> Ega23 ©   (18.10.05 14:28) [24]
> Через временную таблицу с добавлением поля Identity(1,1)
> Чем плох вариант?


Вы все шутите! :)  Временная таблица - это уж совсем когда кризис жанра!
Вариант плох тем, что дергается функция Identity и создается временная таблица!


 
Ega23 ©   (2005-10-18 14:32) [26]

Временная таблица - это уж совсем когда кризис жанра!

С фига-ли? Отличный инструмент, постоянно использую.


 
Курдль ©   (2005-10-18 14:36) [27]


> Ega23 ©   (18.10.05 14:32) [26]
> С фига-ли? Отличный инструмент, постоянно использую.

За последние лет 5 - ни разу не понадобилось извращаться через временные таблицы. Правда я все больше по ораклу и сайбэйсу.


 
Ega23 ©   (2005-10-18 14:42) [28]


> За последние лет 5 - ни разу не понадобилось извращаться
> через временные таблицы. Правда я все больше по ораклу и
> сайбэйсу.


В MS SQL это нормальный инструмент. Стандартный способ, так сказать...


 
Sergey13 ©   (2005-10-18 14:43) [29]

2 [27] Курдль ©   (18.10.05 14:36)
Для Оракла ты привел запрос, который будет работать нормально только без сортировки. Если переделать его в
select rownum, * from (select)
то это будет практически аналог временной таблицы.
ИМХО


 
Курдль ©   (2005-10-18 14:51) [30]


> Sergey13 ©   (18.10.05 14:43) [29]
> 2 [27] Курдль ©   (18.10.05 14:36)
> Для Оракла ты привел запрос, который будет работать нормально
> только без сортировки.

Как это понимать? Также нормально будет работать, только уже новые номера будут соответствовать другим записям.


> Если переделать его в
> select rownum, * from (select)
> то это будет практически аналог временной таблицы.


Мне трудно судить, что значит "аналогом", но есть разница между "получить одним запросом" и "получить скриптом с созданием временной таблицы"?..


 
Sergey13 ©   (2005-10-18 14:55) [31]

2 [30] Курдль ©   (18.10.05 14:51)
> Как это понимать?
Так и понимать. RowNum вычисляется при выборке записей и до сортировки. Если после сортировки все правильно, то тебе просто повезло.


 
Ega23 ©   (2005-10-18 15:04) [32]


> Мне трудно судить, что значит "аналогом", но есть разница
> между "получить одним запросом" и "получить скриптом с созданием
> временной таблицы"?..
>


А я и так могу получить всё одним запросом. Через ХП.  :о)


 
msguns ©   (2005-10-18 15:20) [33]

извращенцы..
Неужели неясно, что № нужен только для отображения.


 
msguns ©   (2005-10-18 15:21) [34]

Удалено модератором


 
isasa ©   (2005-10-18 15:28) [35]

Неужели неясно, что № нужен только для отображения.
А какая разница. Он должен присутствовать в выходном потоке, как равноправное поле. Вот и все.


 
Danilka ©   (2005-10-18 15:33) [36]

isasa ©   (18.10.05 15:28)
Неужели неясно, что № нужен только для отображения.
А какая разница. Он должен присутствовать в выходном потоке, как равноправное поле. Вот и все.


Еслит только для отобращения, то он может "присутствовать в выходном потоке" как калькулирующее поле, например. Другой вариант, думаю не ошибусь, если скажу, что у всех существующих генераторов отчетов есть возможность сделать такое поле встронными средствами самого генератора.


 
Ega23 ©   (2005-10-18 15:47) [37]

В конце-концов никто не мешает написать своего потомка, например, TClientDataSet.


 
evvcom ©   (2005-10-18 16:02) [38]


> Еслит только для отобращения, то он может "присутствовать
> в выходном потоке" как калькулирующее поле, например. Другой
> вариант, думаю не ошибусь, если скажу, что у всех существующих
> генераторов отчетов

Ну какое калькулирующее поле? Ну кто говорит про генератор отчетов? Как к примеру написать запрос для вывода такой странички:
http://www.delphimaster.ru/cgi-bin/forum.pl?n=1&p=2 ?


 
isasa ©   (2005-10-18 16:21) [39]

Посмотрел, сколько у меня "временные" файлы занимают(С фига-ли? Отличный инструмент, постоянно использую. :)))  )  - 4,5G (между прочим на SCSI HDD) - 22,5% общего объема.


 
Danilka ©   (2005-10-18 16:22) [40]

evvcom ©   (18.10.05 16:02)

> Еслит только для отобращения, то он может "присутствовать
> в выходном потоке" как калькулирующее поле, например. Другой
> вариант, думаю не ошибусь, если скажу, что у всех существующих
> генераторов отчетов

Ну какое калькулирующее поле? Ну кто говорит про генератор отчетов? Как к примеру написать запрос для вывода такой странички:
http://www.delphimaster.ru/cgi-bin/forum.pl?n=1&p=2 ?


Я не пойму, зачем запрос, когда все делается элементарно на клиенте, за время, на порядок меньше времени существования этой ветки?
Как ты будешь формировать эту страничку? Я полагаю, открываешь набор данных и последовательно проходишь все записи, формируя эту страничку. При этом, в качестве номера ты можешь либо использовать ADOQuery.RecNo, либо заведя переменную-счетчик, которую обнуляешь перед циклом, в цикле прибавляешь по единичке и использешь на свое здоровье при формировании странички.
В чем проблема-то, никак не пойму?


 
isasa ©   (2005-10-18 16:28) [41]

В чем проблема-то, никак не пойму?
В то, что на клиенте нет ADOQuery.


 
Sergey13 ©   (2005-10-18 16:32) [42]

Интересно, автор хотя бы читает это? 8-)


 
Курдль ©   (2005-10-18 16:41) [43]


> В чем проблема-то, никак не пойму?


Я прочувствовал эту проблему, когда пользовал какие-то навороченные, но и требовательные компоненты отображения типа гридов. Им обязательно надо было привязаться к уникальному целочисленному полю, иначе они работали в усеченном режиме


> Sergey13 ©   (18.10.05 16:32) [42]
> Интересно, автор хотя бы читает это? 8-)

Мы тут не ради счастья авторов бьемся, а ради ИСТИНЫ!!!  :)))
.


 
alex_***   (2005-10-18 16:41) [44]

что-то на клиенте же есть. в какой-то набор данные ловятся


 
Danilka ©   (2005-10-18 16:44) [45]

isasa ©   (18.10.05 16:28)
В чем проблема-то, никак не пойму?
В то, что на клиенте нет ADOQuery.


А что есть на клиенте тогда? Ты уж не темни, говори что там есть, а я так уж и быть, разжую, как из того что есть на клиенте сделать нумерацию постов, не используя всякую ерунду в запросах.
:)


 
msguns ©   (2005-10-18 16:49) [46]

>Danilka ©   (18.10.05 16:22) [40]
>Я не пойму, зачем запрос, когда все делается элементарно на клиенте, за время, на порядок меньше времени существования этой ветки?

Осподи, хоть один здравомыслящий на всю ветку нашелся (не считая меня ;)))

 Какое к лешему "калькулирующее" поле ?
 Какие нафиг временные НД ?

 Вы че, с дуба рухнули ?

А если юзер пересортирует нафик свой НД ? Чисто у себя на компе, то что, сервер должон у себя перемолотить весь энтот временный НД ?

Другой пример: есть вьха, которую смотрит надцать человек и каждый не всю ее, а подмножество (запрос типа селест фром вью), к тому упорядоченное как им захотелось.
И что, сервак должен создать надцать временных НД и за каждым вот это следить, чтоб чисто перенумеровать ?

Блин, ну хлебом не корми дай поспорить на "вечные" темы типа "Номер документа" или "нумерация строк"

Безельники - МАРШ РАБОТАТЬ !!!
ВСЕХ УВОЛЮ !!!!!!!!!!!


 
evvcom ©   (2005-10-18 17:05) [47]


> Я не пойму, зачем запрос, когда все делается элементарно
> на клиенте
, за время, на порядок меньше времени существования
> этой ветки?
> Как ты будешь формировать эту страничку? Я полагаю, открываешь
> набор данных и последовательно проходишь все записи, формируя
> эту страничку.

Вот этого как раз и не надо делать на клиенте! А если у тебя запрос вернет миллион строк? Для этого и придумано в SQL множество различных функций и прочих прибамбасов, чтобы не тащить на клиента миллион строк, не грузить сетку под самое не балуйся, а отсечь еще на сервере то, что клиенту пока не нужно.


 
Danilka ©   (2005-10-18 17:20) [48]

[46] msguns ©   (18.10.05 16:49)

:))

[47] evvcom ©   (18.10.05 17:05)
Вот этого как раз и не надо делать на клиенте! А если у тебя запрос вернет миллион строк? Для этого и придумано в SQL множество различных функций и прочих прибамбасов, чтобы не тащить на клиента миллион строк, не грузить сетку под самое не балуйся, а отсечь еще на сервере то, что клиенту пока не нужно.

Вообще о разных вещах говорим.
Я имею ввиду случай, когда есть запрос, который возвращает только необходимые записи.
Пример - вывести все посты этой ветки.
И эти записи надо пронумеровать.
Только их. А не все, что есть в исходной таблице.


 
isasa ©   (2005-10-18 17:27) [49]

который возвращает только необходимые записи.
.....
И эти записи надо пронумеровать.

Это решается тривиально.

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


 
msguns ©   (2005-10-18 17:33) [50]

>isasa ©   (18.10.05 17:27) [49]
>Вопрос в другом
>содержащие порядковый номер записи в выборке в отдельном поле.

 А вот этот "порядковый номер записи" точно нафиг никому не нужен. Ибо серверу вообще плевать на любой "порядок", а юзверю вообще неизвестно чего надо (по крайней мере серверу). Об этом знает клиентское приложение. Вот пусть оно и заморачивается на этот счет.


 
isasa ©   (2005-10-18 17:53) [51]

а юзверю вообще неизвестно чего надо
Это не дружеский подход к интерфейсу пользователя. :)

Об этом знает клиентское приложение.

Особенно задалбывает, насколько клиентских приложений, делающих одну и ту же выборку... в каждом из которых...


 
Danilka ©   (2005-10-19 08:08) [52]

[49] isasa ©   (18.10.05 17:27)
который возвращает только необходимые записи.
.....
И эти записи надо пронумеровать.
Это решается тривиально.

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


Хм, вообще ниразу с такой задачей не встречался и не могу представить ее необходимость.
Я могу понять, когда есть таблица с автоинкрементным ПК и нам надо выводить значение ключа в отчеты/грид и т.д.
Но когда есть какая-то выборка, котора пронумерована и из нее делают еще одну выборку... в чем полезность такого? Я только вред вижу, например, когда удалили какую-то запись из таблицы в выборке и вся нумерация сдвинулась...


 
evvcom ©   (2005-10-19 08:43) [53]


> Хм, вообще ниразу с такой задачей не встречался и не могу
> представить ее необходимость.

Я недавно встретился с необходимостью. Написал select, возвращающий дерево (в Оракле это connect by) - по смыслу полное меню, потом по inner join соединил с другой выборкой - менюшек, которые могут быть доступны текущему пользователю (там еще много было условий, не важных для этого поста), ну а потом надо всю эту выборку-результат отсортировать нужным образом. Как? Так и пришлось первый select нумеровать и уже по этому номеру сортировать результат.

> в чем полезность такого? Я только вред вижу, например, когда
> удалили какую-то запись из таблицы в выборке и вся нумерация
> сдвинулась...

Заметь, в вышеприведенном примере мне начхать на то, что нумерация может куда-то "сдвинуться". :)
Есть другие идеи, как реализовать такое?


 
Anatoly Podgoretsky ©   (2005-10-19 09:08) [54]

Danilka ©   (19.10.05 08:08) [52]
Но когда есть какая-то выборка, котора пронумерована и из нее делают еще одну выборку... в чем полезность такого? Я только вред вижу, например, когда удалили какую-то запись из таблицы в выборке и вся нумерация сдвинулась...

Очень весело выглядят эти обсуждения по телефону - Варя что это у тебя за ерунда в записи под номером 5, да все в порядке, выдано 5 чайников. Какие к черту чайники, ты же списала три стола.


 
Danilka ©   (2005-10-19 09:12) [55]

evvcom ©   (19.10.05 08:43)
Заметь, в вышеприведенном примере мне начхать на то, что нумерация может куда-то "сдвинуться". :)
Есть другие идеи, как реализовать такое?


Заметь, в твоем примере также нет никакой необходимости передавать это поле на клиента, не так-ли? :)
Коме того, твоя задача решается просто и другими средствами - перед connect by prior ставишь условие WHERE EXISTS (...), и неизвестно еще, что будет быстрее - твой или мой способ. :)


 
Danilka ©   (2005-10-19 09:13) [56]

Anatoly Podgoretsky ©   (19.10.05 09:08)
Очень весело выглядят эти обсуждения по телефону - Варя что это у тебя за ерунда в записи под номером 5, да все в порядке, выдано 5 чайников. Какие к черту чайники, ты же списала три стола.


:)))


 
evvcom ©   (2005-10-19 09:22) [57]


> Заметь, в твоем примере также нет никакой необходимости
> передавать это поле на клиента

Ну, тут ты прав.

> и другими средствами - перед connect by prior ставишь условие
> WHERE EXISTS (...),

угу, а куда девать join-ы с другими таблицами?


 
Danilka ©   (2005-10-19 09:45) [58]

evvcom ©   (19.10.05 09:22)
угу, а куда девать join-ы с другими таблицами?


Ну, тут конечно только 2 варианта - либо твой, либо вытаскивать необходимые поля подзапросами, чем больше таких полей, тем более привлекательный твой вариант.
Да вобщем-то никто и не спорит на счет полезности rownum в запросах, например есть мастер-таблица: счет, есть детальная таблица - оплата счета, как правило, один счет оплачивается одной оплатой, но может быть вариант, когда оплат несколько. Пользователи просят в мастер-таблицу добавить поле - номер и дата оплаты. Причем, если оплат несколько, то показывать любую.
Решается элементарно: делаем подзапрос, в котором указываем условие where rownum=1.

Мои придирки были другого плана - необязательно нумеровать на сервере то, что надо будет нумеровать на клиенте для отчета и т.д.


 
isasa ©   (2005-10-19 12:08) [59]

Почему-то все оппоненты тупо уверены, что эта информация отображается еа экране.
На экране она никому не нужна, и, действительно, вредна(потенциальный источник ошибки).
Как будто, никто не сталкивался, например, с лоторейными билетами.
Печатаем на здоровом листе, разрезаем и раскладываем по номерам.

Вариант два.
Имеем одного клиента. Печатает письма, по два на А4. Потом режем и раскладываем в пачки по номерам для конвертовальной машины.
Переменную информацию выбирает Word-ом - печать со слиянием.

Имеем второго клиента. Печатает сопроводительную документацию на эти письма(по 35 писем в одном документе) - Excel.

Каким раком прикажете синхронизировать подачи, как не сквозной нумерацией в рамках серии.
Сейчас сквозная нумерация на клиентах. И никто не гарантирует, что они пронумеруют выборки синхронно.


 
Danilka ©   (2005-10-19 13:09) [60]

[59] isasa ©   (19.10.05 12:08)


Честно говоря, не очень-то понял твои примеры, но по-моему, если нужна сковзная нумерация и выборки внутри нее, следует заводить физ. поле в таблице.
Шоб небыло проблем, как в случае с Варей, чайниками и тремя столами. :)


 
isasa ©   (2005-10-19 13:30) [61]

следует заводить физ. поле в таблице.

В таблице 400000 записей. Каждая выборка 1000..5000 записей двум клиентам. Естественно они используют один и тот-же запрос. Как потом разгребать номера среди 400000?


 
Danilka ©   (2005-10-19 13:46) [62]

isasa ©   (19.10.05 13:30)
следует заводить физ. поле в таблице.

В таблице 400000 записей. Каждая выборка 1000..5000 записей двум клиентам. Естественно они используют один и тот-же запрос. Как потом разгребать номера среди 400000?


В смысле, что значит "разгребать"? Сделать ПК автоинкрементный, его и использовать..


 
isasa ©   (2005-10-19 13:56) [63]

Сделать ПК автоинкрементный,
Все, устал. :)
Сквозная нумерация в рамках выборки (1000..5000).
Всего выборок  400000/(1000..5000)=400..80.



Страницы: 1 2 вся ветка

Форум: "Базы";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.64 MB
Время: 0.044 c
4-1128006074
petr
2005-09-29 19:01
2005.12.04
порты


3-1129638648
Kor
2005-10-18 16:30
2005.12.04
Как перенисти БД с использованием BDE?


14-1131899975
Alexey31
2005-11-13 19:39
2005.12.04
Как определить?


2-1132341339
AuBaH
2005-11-18 22:15
2005.12.04
проблема с кнопками


10-1108642942
Карелин Артем
2005-02-17 15:22
2005.12.04
Авторизация для вызова удаленного com-интерфейса. Как?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский