|
|
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
На сервере регистрируются клиенты. БД одна на всех клиентов. Есть таблица для хранения заявок клиентов - orders. В таблице заявок есть id autoincrement. Но каждый пользователь хочет видеть свои заявки под своим порядковым номером. Т.е. вместо глобального id (385654, 385904, 386035..) он хочет видеть 1, 2, 3... Пока сделано влоб - сделано отдельное поле 'number', при добавлении заявки, идет SELECT MAX(number) FROM orders WHERE userid = <id пользователя>. И далее результат инкрементируется и записывается в качестве number. Покритикуйте и посоветуйте еще решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2013, 16:11 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
eurobaxВ таблице заявок есть id autoincrement. Но каждый пользователь хочет видеть свои заявки под своим порядковым номером. И какой идиот показывает ему первичный ключ в качестве номера заявки? Сделай отдельное поле под номер, которое совсем не является ключом и пусть сами вводят такие числа, какие хотят. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2013, 16:34 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovСделай отдельное поле под номер, которое совсем не является ключом и пусть сами вводят такие числа, какие хотят. Да вы что! Не хотят они вводить вручную, хотят чтобы сервер сам нумеровал ) Поле выделено - называется number (см. выше) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2013, 17:03 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
eurobaxПоле выделено - называется number (см. выше) А потом один клиент захочет, чтобы нумерация сбрасывалась раз в год, а другой - раз в месяц. Третьему захочется включить в номер код контрагента. И куда пойдёт твой select max?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2013, 18:03 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
Усложнять не надо, задача-то вполне обычная. Просто как ее еще решать? Лично мне не нравится SELECT MAX(), т.к. перебираются все строки, не так ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2013, 21:45 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
eurobaxне так ли? Может так, а может и не так. Это, знаешь ли, зависит... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2013, 22:18 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
eurobax, Если у Вас есть индекс (userID, number) - то перебора всех записей не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2013, 23:39 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
eurobax, В таблице клиентов добавь поле maxnumber и храни в нем максимальное значение. При добавлении заявки - увеличивай. Просто если клиентов дофига то твой селект неоптимален. А таблицу клиента всеравно пользуешь так или иначе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2013, 02:49 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
eurobaxНа сервере регистрируются клиенты. БД одна на всех клиентов. Есть таблица для хранения заявок клиентов - orders. В таблице заявок есть id autoincrement. Но каждый пользователь хочет видеть свои заявки под своим порядковым номером. Т.е. вместо глобального id (385654, 385904, 386035..) он хочет видеть 1, 2, 3... Пока сделано влоб - сделано отдельное поле 'number', при добавлении заявки, идет SELECT MAX(number) FROM orders WHERE userid = <id пользователя>. И далее результат инкрементируется и записывается в качестве number. Покритикуйте и посоветуйте еще решения. Вот именно так и надо решать. Только транзакцию добавления заявки нужно сделать на высшем уровне изоляции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2013, 06:51 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
eurobax, Ещё можно сделать таблицу ( pk(user_id, entity_name), last_order_num ) И вместо select max делать инкремент поля last_order_num и выбирать его значение для следующего номера. Можно, если есть в субд, использовать для этого sequence. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2013, 06:57 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
eurobaxУсложнять не надо, задача-то вполне обычная. Просто как ее еще решать? Лично мне не нравится SELECT MAX(), т.к. перебираются все строки, не так ли? Не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2013, 06:58 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
MasterZiveurobax, Ещё можно сделать таблицу ( pk(user_id, entity_name), last_order_num ) И вместо select max делать инкремент поля last_order_num и выбирать его значение для следующего номера. Можно, если есть в субд, использовать для этого sequence. лучше конечно же написать вменяемый sequence Причин несколько: - с последовательностью проще работать всяким сторонним языкам (используя тот же nextval) - все таки select max from - выделяет номер, но не резвервирует его. И в теории, при работе нескольких пользователей может быть вариант: Пользователь 1: select max=2 Пользователь 2: select max=2(потому что первый еще ничего не вставил) Ну и дальнейшие события вы представляете. Придется проверять и при вставке..а там заново выделять, а вдруг кто то уже вставил?:)) Вообщем надо будет писать свой механизм резервирования номеров, проще сразу последовательность написать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2013, 09:54 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
MasterZivМожно, если есть в субд, использовать для этого sequence. А что, sequence сможет генерировать независимые последовательности для неопределенного числа клиентов? Или предлагается при вставке нового клиента делать очередной create sequence? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2013, 10:58 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
Кот Матроскинeurobax, Если у Вас есть индекс (userID, number) - то перебора всех записей не будет. Спасибо, действительно перебора нет, используется индекс. Но теперь другой вопрос - сильно ли скажется на производительности перестройка такого индекса (userID, number) при вставках? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2013, 13:32 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
eurobaxсильно ли скажется на производительности перестройка такого индекса (userID, number) при вставках? Зависит от типа индекса. Деревянные индексы при вставках не перестраиваются. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2013, 13:34 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЗависит от типа индекса. Деревянные индексы при вставках не перестраиваются. (userid,number), type:BTREE, unique:No - деревянный? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2013, 14:13 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
eurobaxBTREE, unique:No - деревянный? http://translate.google.ru/#en/ru/tree Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2013, 14:20 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
eurobaxСпасибо, действительно перебора нет, используется индекс. Но теперь другой вопрос - сильно ли скажется на производительности перестройка такого индекса (userID, number) при вставках? Возбмите и померяйте, насколько это скажется на Вашей системе и Вашей СУБД. Какой смысл обсуждать сферические вставки в вакууме? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2013, 14:31 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakoveurobaxBTREE, unique:No - деревянный? http://translate.google.ru/#en/ru/tree А!! Я сразу не сообразил, конечно деревянный! Спс ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2013, 14:32 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
eurobax, в таблице Юзер (либо еще где) добавьте поле счетчика документов и при вставке нового документа инкрементируйте его у нас такая нумерация в разных разделах присутствует, поэтому - вынесли индивидуальные счетчики в отдельную таблицу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2013, 16:00 |
|
||
|
Как обеспечить порядковую нумерацию записей клиента?
|
|||
|---|---|---|---|
|
#18+
Озверин Пользователь 1: select max=2 Пользователь 2: select max=2(потому что первый еще ничего не вставил) Ну и дальнейшие события вы представляете. Придется проверять и при вставке..а там заново выделять, а вдруг кто то уже вставил?:)) Че за??? Там же у него наверняка select max(number) where userId = @ID . Юзера - разные... максы у них разные, коллизи будут только если от одного юзера несколько одновременных вставок возможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2013, 11:21 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38277628&tid=1541235]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
52ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 355ms |

| 0 / 0 |
