За последние 24 часа нас посетили 18513 программистов и 1606 роботов. Сейчас ищут 935 программистов ...

diff. Сравнение версий

Тема в разделе "Прочие вопросы по PHP", создана пользователем Koc, 3 янв 2009.

  1. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    итак, есть что-то. Например товар в инет-магазине. И тут кто-то из администраторов меняет некоторые параметры этого товара (объем микроволновой печи модели SGD-300 изменен с 25л на 26, поднимает цену на 10$, добавляет возможные варианты цветов).

    Хочется, что бы была история версия (как на Педивикии, svn/mercurial), а именно было видно кто, когда и какие параметры менял, была б возможность откатиться.

    Как обычно реализуются такие задачи?

    А Можно делать дополнительные таблицы, в которых будут "неактивные" товары, с указанием версий
    Б делать сериализованный массив

    Кто-то да наверняка сталкивался с этой задачей, расскажите плизз, как решили ее.
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Лучше просто вести журнал действий администраторов. Типа
    Код (Text):
    1. 01/01/09 15:21 Administator_1 изменил описание и цену (исходная цена - $160) товара #23564.
     
  3. В принципе, ты можешь оставить ту же таблицу отделив первичный автоинкрементный ключ в отделный столбик, и оставив id товара, и вместо ИЗМЕНЕНИЯ данных, ДОПИСЫВАТЬ еще одну запись, с тем же id товара, но соответственно, с другим ключом, т.е. по id товара можно выбрать полностью всю историю изменения товара, у текущего состояния будет максимальный id.
     
  4. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    тут все немного сложнее. Для просмотра товара используется не 1 а около 5-6 таблиц (атрибуты, изображения и тд).
    То есть когда пользователь просматривает страницу информации о товаре будут обработаны эти таблицы. Уже немало.
    Больше строк-дольше будет происходить запрос, а тем более просмотр ченджлога нужен только администраторам (это я против хранения изменений в той же таблице, где и рабочая версия).

    + ко всему хочется сделать логирование изменений в атрибутах, наборах атрибутов, фразах (это уже в далеком будующем, когда будет многоязычность). Любые изменения должны логироваться с возможностью их отката. (простое журналирование событий не подходит)

    Поэтому, по-моему нужно копать в сторону отдельной таблицы для всех изменений, в которой будут находиться:
    id|user_id|timestamp|module|changes
    , где changes - сериализованный массив array['измененное поле таблицы'] = 'новое значение',
    module - таблица, которую меняли.
    так-то. Поправьте меня, если нужно.
     
  5. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    Может быть так сделать

    Перед обновлением в основной таблице делать
    [sql]
    INSERT INTO history(id_tovar, name, date_update, ....) SELECT id, name, date_update, .... FROM tovar
    [/sql]

    А потом уже обновлять товар в основной таблице

    [sql]
    UPDATE tovar SET name=$name, date_update=$date, .... WHERE id=$id
    [/sql]