Ситуация такая: нужно создать кастомную автонумерацию, причем номер придается не при создании записи, а в какой-то момент ее жизненного цикла через тригер.
Автономер содержит неизменную часть, +часть содержащую дату, + собственного автонумерацию (возрастающие числа), которая должна быть уникальна только в пределах одного дня.
Вопрос: как сохранить последнее значение автонумерции?
Мой вариант: создать Кастом Сеттинг в котором только два поля (дата и значение) и только одна запись.
При создании нового кастомного автономера - брать эту запись Кастомного сетинга, проверять дату в первом поле, если не сегодня - то начать отсчет с единицы, если сегодня - то взять значение из второго поля, увеличить на единицу, созданный автономер закинуть в поле Рабочей записи, и в той единственной записи каст сетинга записать текущую дату и только что созданный автономер (его инкриментируемую часть).
Ваше мнение?
Ситуация такая: нужно создать кастомную автонумерацию, причем номер придается не при создании записи, а в какой-то момент ее жизненного цикла через тригер. Автономер содержит неизменную часть, +часть содержащую дату, + собственного автонумерацию (возрастающие числа), которая должна быть уникальна только в пределах одного дня. Вопрос: как сохранить последнее значение автонумерции? Мой вариант: создать Кастом Сеттинг в котором только два поля (дата и значение) и только одна запись. При создании нового кастомного автономера - брать эту запись Кастомного сетинга, проверять дату в первом поле, если не сегодня - то начать отсчет с единицы, если сегодня - то взять значение из второго поля, увеличить на единицу, созданный автономер закинуть в поле Рабочей записи, и в той единственной записи каст сетинга записать текущую дату и только что созданный автономер (его инкриментируемую часть). Ваше мнение?
Я бы не заморачивался с custom settings.
1. Последнюю созданную запись можно получить по ORDER BY CreatedDate DESC LIMIT 1
2. Достаешь из нее предудущее значение - парсишь (получаешь дату и day number)
3. Сравниваешь дату с TODAY() и если не равно начинаешь с единицы или продолжаешь.
Логика не сложная, если шаг 2 не вызывает проблем.
Этот вариант исключает промежуточное хранение данных. Оно мне кажется лишним.
Я бы не заморачивался с custom settings. 1. Последнюю созданную запись можно получить по ORDER BY CreatedDate DESC LIMIT 1 2. Достаешь из нее предудущее значение - парсишь (получаешь дату и day number) 3. Сравниваешь дату с TODAY() и если не равно начинаешь с единицы или продолжаешь. Логика не сложная, если шаг 2 не вызывает проблем. Этот вариант исключает промежуточное хранение данных. Оно мне кажется лишним.
Вариант не плохой, но проблема с уникальностью значения. Например если создать набор записей, в последнем храниться наибольший номер, удаляем последний. Следующий элемент опять будет содержать номер как и предыдущий (удалённый). Если это не критично для бизнес модели, тогда вариант Дмитрия наилучший.
[quote="Dmitry Shnyrev"]Я бы не заморачивался с custom settings. 1. Последнюю созданную запись можно получить по ORDER BY CreatedDate DESC LIMIT 1 2. Достаешь из нее предудущее значение - парсишь (получаешь дату и day number) 3. Сравниваешь дату с TODAY() и если не равно начинаешь с единицы или продолжаешь. Логика не сложная, если шаг 2 не вызывает проблем. Этот вариант исключает промежуточное хранение данных. Оно мне кажется лишним.[/quote] Вариант не плохой, но проблема с уникальностью значения. Например если создать набор записей, в последнем храниться наибольший номер, удаляем последний. Следующий элемент опять будет содержать номер как и предыдущий (удалённый). Если это не критично для бизнес модели, тогда вариант Дмитрия наилучший.
Вариант Дмитрия не подошел, так как этот номер придается не в момент создания записи, а когда-то позже, и словить ту запись, в которой стоит "последний" номер - не получается.
Кроме того - действительно - уникальность.
Все решилось проще. Задание изменили -вот этого нет: возрастающее число, которое должна быть уникально только в пределах одного дня.
Просто в этот дополнительный АйДи (состоящий из неизменной и уникальной частей) берутся несколько последних цифр из настоящего имени-автономера данной записи. Вот тебе и уникальность и связь между АйДишками, которая пригодится, и ничего сохранять не нужно.
Вариант Дмитрия не подошел, так как этот номер придается не в момент создания записи, а когда-то позже, и словить ту запись, в которой стоит "последний" номер - не получается. Кроме того - действительно - уникальность. Все решилось проще. Задание изменили -вот этого нет: [i]возрастающее число, которое должна быть уникально только в пределах одного дня.[/i] Просто в этот дополнительный АйДи (состоящий из неизменной и уникальной частей) берутся несколько последних цифр из настоящего имени-автономера данной записи. Вот тебе и уникальность и связь между АйДишками, которая пригодится, и ничего сохранять не нужно.