![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Аналог следующего update на Access-e [MySQL, Access]
Dmitry S © (2008-08-05 18:28:00)MySQL:
SET @i=0;
UPDATE `table` SET `field`=(@i:=@i+1) WHERE ... ORDER BY [name];
Как сделать тоже самое на Access-e?
Устно говоря, задача такая: пронумеровать по порядку таблицу в при определенной сортировке.
sniknik (2008-08-06 13:19:00) [21]> Какие еще проблемы?
хотели реально помочь...
с описанными ограничениями
UPDATE [table]
SET [field]=DSum(1, '[table]' , 'name<='''+table.name+'''')
Сергей М. (2008-08-06 13:18:00) [22]
> записи выбраны не очевидным условием WHERE
Это еще что за зверь ?)
> изза 10 строк тащить из базы еще 15000
А никто и не заставляет тебя их всех тащить.
С другой стороны, как юзер узнает , что ему нужно оперировать с M записями, начиная с N-ной, пока он не увидит всеK записей, среди которых фигурируют эти самые N интересующих его записей ?
Medbe}I{onok XML (2008-08-06 13:16:00) [23]Если делаю, значит оно так нужно мне.
нужно нумеровать строки - нумеруй. в шаблоне отчета.
Ega23 (2008-08-06 13:16:00) [24]
> Оно вам надо, знать для чего я это делаю? Если делаю, значит
> оно так нужно мне. Какие еще проблемы?
Да делай, кто мешает-то? Ты сначала проблему сформулируй. из твоего [21] нихрена не понятно.
Dmitry S (2008-08-06 13:15:00) [25]Удалено модератором
Medbe}I{onok XML (2008-08-06 13:15:00) [26]ну как как.
печатать же можно только то, что видишь в гриде.
"что вижу, то и пою"
Johnmen (2008-08-06 13:11:00) [27]
> Необходимо напечатать 10 строк начиная с N-ой - делается
> просто с помощью LIMIT-а или его аналога
Хм... Как связан предикат LIMIT с печатью?
:)
Medbe}I{onok XML (2008-08-06 13:10:00) [28]а при печати строки важно выводить ее номер.
Нумерация на печати делается средствами репортера.
Ega23 (2008-08-06 13:09:00) [29]
> 2. А, например, необходимо напечатать строки определенной
> группы
Блин. Я нихрена не понял, что тебе всё-таки надо.
Dmitry S (2008-08-06 13:06:00) [30]
> Сервер тебе отдал НД в требуемой тебе сортировке, получи
> его и пронумеруй полученное как тебе надо, в чем проблема-
> то ?)
см [21].2
Dmitry S (2008-08-06 13:05:00) [31]
> Ega23 © (06.08.08 12:58) [17]
Вот к примеру задачи такая:
1. Необходимо напечатать 10 строк начиная с N-ой - делается просто с помощью LIMIT-а или его аналога, если он есть в Access-е.
2. А, например, необходимо напечатать строки определенной группы (т.е. записи выбраны не очевидным условием WHERE), а при печати строки важно выводить ее номер. А изза 10 строк тащить из базы еще 15000 (в среднем), нумеровать, а потом фильтровать не хочется - это долго. Поэтому мной и было решено поместить эти данные в таблицу.
Medbe}I{onok XML (2008-08-06 13:01:00) [32]в чем проблема-то ?)
проблема у него в кислоте. дезоксирибонуклеиновой
Сергей М. (2008-08-06 13:00:00) [33]
> Как пронумеровать по порядку таблицу при определенной сортировке?
Нумеруй себе на здоровье на клиентскойстороне, зачем для своих странностей привлекать сервер-то ?
Сервер тебе отдал НД в требуемой тебе сортировке, получи его и пронумеруй полученное как тебе надо, в чем проблема-то ?)
Medbe}I{onok XML (2008-08-06 12:59:00) [34]Пользователь вводит номер, по которому осуществляется поиск.
Юзер ввел десять и надо найти десятую запись?
Для этого не надо ничего нумеровать.
Ega23 (2008-08-06 12:58:00) [35]
> Как пронумеровать по порядку таблицу при определенной сортировке?
Вот смотри. Я получил НД на клиент. Дальше я могу сделать с ним всё, что хочу. Могу наложить фильтр, тогда часть записей скроется. Могу наложить правило(а) сортировки. Причём применять их по банальному OnTitleClick грида. И каждый раз порядок представления НД будет другим.
Так что ты хочешь получить?
Dmitry S (2008-08-06 12:54:00) [36]
> до меня дошло!
Не правильно дошло, зря ветку переместил.
Мне нужно выводить порядковый номер строки для любой части выборки этих строк.
Для связи я использую ключи. Но задача состоит не в образовании связей, а в задании порядковых номеров строкам. Еще раз повторяю нужно это для того, чтобы не выстраивать все дерево каждый раз, когда требуется порядковый номер.
А также для быстрого поиска строки с определенным номером. Пользователь вводит номер, по которому осуществляется поиск. Строить дерево при этом очень накладно :(
И вообще вопрос не о том, как планировать структуру БД, а вполне конкретный: Как пронумеровать по порядку таблицу при определенной сортировке?
sniknik (2008-08-06 12:07:00) [37]до меня дошло!
он пытается сделать идентификацию записей по порядковому номеру (для чего нужны ключи ему видимо неведомо...).
> и этот номер нужен при такой выборке.
тот же номер у него и для показу пользователю...
> потому что должна восприниматься человеком, как нумерация по-порядку.
sniknik (2008-08-06 11:54:00) [38]сделать можно, правда с ограничениями...
первое - уникальные значения у сортируемого поля/полей. (фактически требуется наличие ключа, чего в [0] и далее не видно)
и второе, самое главное... необходимо обьяснить смысл этих манипуляций, т.к. тому кто этот запрос будет составлять (я например) надо победить природную лень, и нежелание выполнять бессмысленную работу...
> SET @i=0;
> UPDATE 'table' SET 'field'=(@i:=@i+1) WHERE ... ORDER BY [name];
вот какой смысл?
пронумеровать физически в таблице часть данных (имеется WHERE) если по определению sqlсерверу на любую нумерацию плевать. т.е. серверу это не нужно.
пользователю? а ему оно нафиг? ктото например пронумеровал в таблице всех с именем "сергей", и тут же, с именем "марина", или вообще не с именем а всех женского пола... что ему даст тот бардак, что в результате будет в этй "нумерации"? или предполагается выборку делать сразу после нумерации? тогда почему не нумеровать именно выборку (тем более там это уже есть), нафига сохранять бессмысленные вне контекста результаты в базу?
> Вот в общих чертах.
не убедительно. не обьясняет нафига оно физически в базе.
Dmitry S (2008-08-06 11:52:00) [39]Есть документ, в нем строки, грубо говоря. Строки в документе структурированы в виде дерева.
[doc] - таблица документов (Поля: doc_id, name, ...)
[line] - таблица строк (Поля: line_id, doc_id, linegroup_id, pos, name, ...)
[linegroup] - таблица для задания структуры. Она общая для всех документов. (Поля: linegroup_id, linegroupparent_id, name).
В line содержатся строки всех документов. Принадлежность строки документу определяется полем doc_id.
Построим дерево строк какого либо документа таким образом, что ветки одного уровня и родителя были отсортированы по алфавиту, строки каждой ветки также отсортированы по алфавиту. Далее, представим дерево в TreeView. Необходимо пронумеровать строки сверху вниз в том порядке, в каком они встречаются в TreeView.
Данная нумерация должна быть без разрывов, потому что должна восприниматься человеком, как нумерация по-порядку.
Строки из базы могут извлекаться как угодно (одна конкретная запись, блок записей), и этот номер нужен при такой выборке. К тому же нужен будет поиск записи с определенным номером.
Вот в общих чертах.
Ega23 (2008-08-06 11:39:00) [40]Делай нумерацию на клиенте. Нафига на сервере-то?