Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Номер контракта автоматически на PHP Mysql

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
coolxela
Отправлено: 12 Апреля, 2017 - 17:05:55
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Март 2017  


Помог: 0 раз(а)




Здравствуйте, дорогие друзья. Вообщем очередной вопрос. В фирме номера контрактов вставляется следующем образом
например 01/04-17. Здесь "01" это порядковый номер контракта "04" месяц а нашем случае апрель а 17 как вы уже догадались это в нашем случае 2017 год. И самое интересное порядковый номер каждый месяц начинаться должен с нуля. И все это надо организовать средствами PHP. Как реализовать последние два показателя номера контракта уже ясно просто буду брать из месяца и года текущего а вот насчет первого показателя проблемы. Как или из чего генерировать порядковые числа и чтоб они сохранялись в базе по порядке и в начале каждого месяца нулились и начинали с единицы. Подскажите пожалуйста как реализовать ? Подайте так сказать идею ) Спасибо
Хотел сделать из базы и на value инпута вывести текущий меясц и год в конце но каждый раз он перебирает все записи и в поле ввода показывает 16 записей каждый раз
 
 Top
haveFun
Отправлено: 12 Апреля, 2017 - 19:04:39
Post Id



Гость


Покинул форум
Сообщений всего: 102
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




как данные в бд хранятся? у поядкового номера контракта отдельный столбец, или вся каша в одном поле?
 
 Top
Мелкий Супермодератор
Отправлено: 12 Апреля, 2017 - 21:08:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Туманная голова предлагает следующее:
заводите вспомогательную табличку: company_id, month (date check day(date)=1), num_order

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

Для postgresql 9.5+:
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE num_orders (
  2.     dm date NOT NULL CHECK(extract('day' FROM dm)=1) PRIMARY KEY,
  3.     num_order int NOT NULL DEFAULT 1
  4. );
  5. WITH gn AS (
  6. INSERT INTO num_orders (dm) VALUES (date_trunc('month', date 'now')) ON conflict(dm) do UPDATE SET num_order = num_orders.num_order + 1 returning num_order
  7. )
  8. INSERT INTO targettable (text_doc_num, ...) VALUES (concat((SELECT num_order FROM gn), to_char(date 'now', '/MM-YY')), ...);

Как видно, достаточно одного запроса.


-----
PostgreSQL DBA
 
 Top
coolxela
Отправлено: 14 Апреля, 2017 - 16:45:43
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Март 2017  


Помог: 0 раз(а)




Мелкий пишет:
Туманная голова предлагает следующее:
заводите вспомогательную табличку: company_id, month (date check day(date)=1), num_order

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

Для postgresql 9.5+:
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE num_orders (
  2.     dm date NOT NULL CHECK(extract('day' FROM dm)=1) PRIMARY KEY,
  3.     num_order int NOT NULL DEFAULT 1
  4. );
  5. WITH gn AS (
  6. INSERT INTO num_orders (dm) VALUES (date_trunc('month', date 'now')) ON conflict(dm) do UPDATE SET num_order = num_orders.num_order + 1 returning num_order
  7. )
  8. INSERT INTO targettable (text_doc_num, ...) VALUES (concat((SELECT num_order FROM gn), to_char(date 'now', '/MM-YY')), ...);

Как видно, достаточно одного запроса.


Спасибо Вам большое. Так и сделал создал отдельную табличку и при добавлении формы сначала в одну потом остальные поля в другую табличку пихаю )
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB