За последние 24 часа нас посетили 54054 программиста и 1779 роботов. Сейчас ищут 859 программистов ...

Как отследить обновления полей таблицы

Тема в разделе "MySQL", создана пользователем paqwerty, 20 сен 2011.

  1. paqwerty

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

    С нами с:
    2 мар 2007
    Сообщения:
    121
    Симпатии:
    0
    Все доброго времени суток!

    Помогите пожалуйста рещить проблему:

    У меня есть, например, таблица с двумя колонками "имя товара" и "цена" с n-ым количеством строк. Как мне отследить у каких строк была изменена цена например за последние 3 дня.

    Я знаю только [sql]SHOW TABLE STATUS[/sql], но результат выводит только сводную информацию, это не то...

    Очень надеюсь на вашу помощь!
     
  2. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    добавить к таблице еще одну колонку - last_changed_date, при изменении цены пихать туда timestamp
    ну и select * from таблица where TIMESTAMPDIFF(DAY, NOW(), last_changed_date) <=3
     
  3. paqwerty

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

    С нами с:
    2 мар 2007
    Сообщения:
    121
    Симпатии:
    0
    karakh, спасибо за помощь, а как мне узнать, что строка была изменена именно по цене?
     
  4. paqwerty

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

    С нами с:
    2 мар 2007
    Сообщения:
    121
    Симпатии:
    0
    И еще, у меня есть колонка "date_modified", я делаю как ты сказал:

    [sql]
    select * from таблица where TIMESTAMPDIFF(DAY, NOW(), date_modified) <=3
    [/sql]

    мне выдает ошибку

    Код (Text):
    1.  
    2. #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(DAY, NOW(), date_modified) <=3
    3.  LIMIT 0, 30' at line 1
     
  5. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    1. что значит "как узнать"? ведь это твой скрипт меняет цену? ну вот когда скрипт меняет цену, пусть и пишет таймстамп в это поле. А когда меняет не цену а что-то еще, пусть не пишет.

    2. какая версия mysql? TIMESTAMPDIFF появляется с 5.0, может быть в этом дело? Если да, попробуй просто datediff (NOW(),date_modified )
     
  6. paqwerty

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

    С нами с:
    2 мар 2007
    Сообщения:
    121
    Симпатии:
    0
    Смысл такой, в офисе есть своя внутренняя бд на акссесс. Нужный человек обновляет в ней цены одним махом на множество позиций товара. Затем цены из бд автоматически отправляются в бд mysql. Ему само собой пишется отчет об обновлении, НО ЧЕЛОВЕК ЭТОТ НЕ ХОРОШИЙ ЗАБИВАЕТ НА ОТЧЕТ, т.е. игнорит его. А на след. день или позже обнаруживается что обновление цен в бд mysql прошло не так гладко, т.е. не все позиции обновлены. И мне потом задается вопрос какие позиции обновились и время(дата) их обновления. Т.е. получается у меня нет доступа к скрипту обновления. И я пытаюсь выяснить какие и когда позиции обновились через mysql запросы в phpmyadmin.

    Версия и вправду у меня младше 5 и дело именно в этом. Я попробовал твой вариант:

    [sql]
    SELECT * FROM `имя_табл` WHERE datediff(DAY, NOW(), date_modified ) <= 3
    [/sql]

    Мне отвечает:

    Код (Text):
    1.  
    2. #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' date_modified ) <= 3
    3.  
    4.  LIMIT 0, 30' at line 1
    Я попробовал так:

    [sql]
    SELECT * FROM `имя_табл` WHERE datediff(NOW(), date_modified ) <=3
    [/sql]

    Мне возвращает нулевой результат
     
  7. paqwerty

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

    С нами с:
    2 мар 2007
    Сообщения:
    121
    Симпатии:
    0
    Вроде как разобрался, сделал так:

    [sql]
    SELECT * FROM `имя_табл` WHERE TO_DAYS(NOW()) - TO_DAYS(date_modified) <=3
    [/sql]

    Все работает как надо.

    Только еще раз хотел уточнить: тип поля TIMESTAMP будет автоматически проставлятся для строки, которая была или добавлена как новая или изменена по какому либо параметру, т.е. при обращении к этой строке операций INSERT или UPDATE?
     
  8. krow7

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

    С нами с:
    12 авг 2009
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    из Азии
    Код (Text):
    1. <=3
    хм...
     
  9. Goryn

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

    С нами с:
    4 апр 2006
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    Ярославль
    Создать триггер(если позволяет версия MySql) и писать всю историю изменений в другую таблицу.