лог значения в базе

Тема в разделе "PHP", создана пользователем sultan347, 17 сен 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    Вообщем в базе в одной таблице есть значение в формате integer (Далее "столбец YYY"). Такая задача, что бы было легче анализировать, как его оптимально логировать. То есть в этой таблице за одно событие (sql запрос к этой таблице) могут изменятся любые значения, могут удалится строка, добавлятся, но если сумма sum(YYY) остается таким же, то в лог не заносится. Но как только за один такт поменяется значение sum(YYY), в лог занести этот sql запрос.
    Может как то получится решит это MySql триггерами, как то сравнит перед запросом и после?
     
  2. pslava

    pslava

    Регистр.:
    16 май 2007
    Сообщения:
    618
    Симпатии:
    122
    Сохраняй значение sum(YYY) где-то в базе, чтобы каждый раз не пересчитывать (нагрузка будет большая на перебор всех строк таблицы) и тригерами работай с этим значением и в коонце анализируй изменилось ли оно и логируй
     
  3. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    А может как вариант записывать в лог талицу все опасные запросы (update,insert,replace) подряд, и в крон посадит пхп файл, который будет каждый 5 минут (может даже меньше, смотря как быстро будет заполнятся) удалит запросы, которые не привели к изменению sum(YYY).
    Если этот вариант взять, как написать этот скрипт?
     
  4. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    не получается создать триггер

    PHP:
    CREATE TRIGGER `logAFTER  update ON `pr_table` FOR EACH ROW INSERT INTO `log_tableSET old=OLD.sum(YYY);
    и так ошибка
    PHP:
    CREATE TRIGGER `logAFTER  update ON `pr_table` FOR EACH ROW INSERT INTO `log_tableSET old=sum(OLD.YYY);
    Подскажите, как сумму столбца забрать в триггерах?
     
  5. Sanuch

    Sanuch

    Регистр.:
    25 май 2009
    Сообщения:
    207
    Симпатии:
    70
    написать отдельный запрос. OLD.YYY значение одного поля.
     
  6. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    Это по твоему ответ, или пост набираем? Приведи пример что ли, как написать отдельный запрос
     
  7. Sanuch

    Sanuch

    Регистр.:
    25 май 2009
    Сообщения:
    207
    Симпатии:
    70
    добавьте переменунную, в которую будет заноситься требуемое значение
    PHP:
    SET @total = (select sum(fieldfrom mytable);
    и уже после можно работать с переменной total
    PHP:
    SET old = @total;
    из кода выше не понятно, что такое old
     
  8. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    а где хранить эту временную переменную total, ведь это sql запрос без среды php
     
  9. Sanuch

    Sanuch

    Регистр.:
    25 май 2009
    Сообщения:
    207
    Симпатии:
    70
    переменная создается и действует в теле триггера и нигде не хранится
     
    sultan347 нравится это.
  10. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    Не получается:(:nezn:
     
Статус темы:
Закрыта.