powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / История значений
3 сообщений из 3, страница 1 из 1
История значений
    #39674282
Фотография Alexei772
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте

посоветуйте, пожалуйста, как лучше сделать

в БД в таблице pages есть два поля title(varchar) и text(longblob)

в форме редактирования на title использую инпут, а на text стоит ckeditor (текст редактируем в html, вставляем картинки, таблицы и т.д. - грубо говоря используем как ворд)

мне нужно хранить историю изменения текстового поля text(longblob)
я сейчас сделал вторую таблицу history: page_id, text
и при нажатии на "сохранить" (например редактирую 10 запись, например, select title, text from `pages` where `id`=10):
1. в таблицу history добавляю текст до сохранения, условный код:
Код: sql
1.
insert into `history` set  text=(select `text` from `pages` where `id`=10)


2. а в таблице pages обновляю значение, которое у меня приходит из POST: update pages set text=POST[text] where `id`=10)

Таким образом я каждый раз сохраняю "новую" версию в pages, а старую версию добавляю в history

Вприницпе нормальное решение, меня устраивает, но может быть есть получше варианта решения такой задачи?
...
Рейтинг: 0 / 0
История значений
    #39674320
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Измените структуру таблицы и добавьте в неё поле ... ну, скажем, dt DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP. Алгоритм изменится так - при нажатии на "сохранить" существующая запись обновляется, автоматически получая IsValid, равный времени прекращения действия записи, затем в таблицу добавляется новая запись.

Соответственно при прочих операциях в запрос добавляется условие WHERE IsValid IS NULL - и все "старые" записи отсеиваются. А индекс по этому полю (одиночно или префиксно) не даст просесть по производительности.

Иными словами, одна таблица хранит и текущее актуальное состояние, и историю, и даже штампы времени актуальности (изменения). При работе с историей не нужно делать UNION двух таблиц, чтобы получить "сейчас и раньше".
...
Рейтинг: 0 / 0
История значений
    #39674321
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinaпри нажатии на "сохранить" существующая запись обновляетсяИмеется в виду UPDATE table SET title=title - т.е. фактического обновления данных нет, а вот поле dt обновляется с NULL на текущее время.

PS. Альтернативно - штамп времени сам по себе, фиксирует время создания записи, а актуальностью рулит поле IsValid INT(1) DEFAULT1, получающее 0 при обновлении.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / История значений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]