Скриптик оповещение изменения таблицы mysql

Тема в разделе "PHP", создана пользователем palbanec, 3 апр 2013.

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

    palbanec

    Регистр.:
    2 июл 2010
    Сообщения:
    457
    Симпатии:
    40
    На nic.ru блокирован TRIGGER в mysql
    Мне нужен скрипт, по крону, который будет сравнивать 2 одинаковые таблицы в базе "price" и "price2" Если "price" изменился, скрипт отправит на майл оповещение с содержимым, после удачной отправки майла скопирует содержимое с "price" в "price2".

    Поможет кто? Или есть другое предложение?
     
  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    Например запускать каждый час скрипт в котором вытащить время обновления обоих таблиц
    Код:
    SELECT UPDATE_TIME
    FROM  information_schema.tables
    WHERE  TABLE_SCHEMA = 'test' AND (TABLE_NAME = 'price' OR TABLE_NAME = 'price2')
    ORDER BY TABLE_NAME;
    и проверять, если разница больше чем час, то скопировать
    Код:
    TRUNCATE TABLE `price2`;
    INSERT HIGH_PRIORITY INTO price2 SELECT * FROM price;
     
  3. palbanec

    palbanec

    Регистр.:
    2 июл 2010
    Сообщения:
    457
    Симпатии:
    40
    polyetilen, не понял. А на месте сравнить нельзя?
    Может кто поможет?

    Поможет кто?????
     
  4. byT3b0N3

    byT3b0N3 Создатель

    Регистр.:
    20 апр 2013
    Сообщения:
    12
    Симпатии:
    3
    можно структуру таблиц узнать?
    и на чём Вам скрипт нужен? php?
     
  5. palbanec

    palbanec

    Регистр.:
    2 июл 2010
    Сообщения:
    457
    Симпатии:
    40
    Код:
    [B]Таблица:[/B] ag_ca_catalog 
    >ID
    >SORT
    >CODE
    >NAME 
    >ACTIVE
    >PRICE
    >SECTION
    >MANUF
    >DESCRIPTION
    >FULL_DESCRIPTION
    >WAREHOUSE_Q 
    >RATING_SALES
    >PICTURE
    >PICTURE_BIG 
    >PRINT_NEW
    >WH_ADRESS
    >PAGE_TITLE
    >META_DESCRIPTION 
    >META_KEYWORDS
    
    Да. Нужен на php. Что б например в крон поместить.
     
  6. byT3b0N3

    byT3b0N3 Создатель

    Регистр.:
    20 апр 2013
    Сообщения:
    12
    Симпатии:
    3
    как быстро надо? а то времени мало, если можно попытаюсь написать до конца недели
    я предполагая что в обоих таблицах у одинаковых данных (кроме прайс) одинаковый айди?



    попробуйте, меняйте конечно под себя.
     
  7. palbanec

    palbanec

    Регистр.:
    2 июл 2010
    Сообщения:
    457
    Симпатии:
    40
    Не быстро, как сможете.

    Id уникален, не повторяется.Это обычный набор цифры порядкового номера

    Ps: Я думал реализацию, так как на nic.ru не работают тригеры в базе. Нужно написать php скрипт и засунуть в крон.
    Добавить в базу PRICE2 со старым значением, и если PRICE изменился, то при выполнение скриптом сравнения. Он будет посылать на указанный майл письмо с содержимым "ID+NAME+PRICE+PRICE2" c каждой новой строкой, следующие изменённые товары.Чтоб скрипт все проверил, а потом в сообщение все скупом отправил. Пример:
     
  8. APXOH

    APXOH Создатель

    Регистр.:
    16 янв 2013
    Сообщения:
    36
    Симпатии:
    6
    Самый примитивный и прямой вариант:
    <?php
    // Подключаем базу данных (лишняя писанина, но приведу для полной функциональности)

    $db_host = "localhost";
    $db_user = "usr";
    $db_pass = "pass";
    $db = "main";

    function connect(){
    global $db_host, $db_user, $db_pass, $db;
    $con = @mysql_connect($db_host,$db_user,$db_pass);
    if (!$con)
    {
    echo "<br><strong>Невозможно соединиться с базой данных.</strong><br>".mysql_error();
    return;
    }
    $step2 = @mysql_select_db($db);
    if (!$step2)
    {
    echo "<br><strong>Невозможно соединиться с базой данных.</strong><br>".mysql_error();
    return $con;
    }

    return $con;
    }
    function q($query)
    {
    $con = connect();
    $res = @mysql_query($query);
    return $res;
    }
    function values($query){
    $result = q($query);
    $all_data = array();
    while ($rg = @mysql_fetch_array($result))
    {
    array_push($all_data,$rg);
    }
    return $all_data;
    }


    // Основной текст далее


    // получаем последний айди в таблицах
    $last_id1 = values("SELECT MAX(id) AS mid FROM price");
    $last_id2 = values("SELECT MAX(id) AS mid FROM price2");

    if($last_id1[0]["mid"] > $last_id2[0]["mid"]) // если айди в первой таблице больше
    {
    if(mail(adm@list.ru, "New", "New price")) // пробуем отправить письмо
    values("INSERT INTO price2 SELECT * FROM price WHERE id>".$last_id2[0]["mid"]); // обновляем вторую таблицу свежими данными
    }
    ?>
     
  9. gothmog

    gothmog Постоялец

    Регистр.:
    18 июн 2011
    Сообщения:
    60
    Симпатии:
    24
  10. FosFer

    FosFer Постоялец

    Регистр.:
    23 окт 2012
    Сообщения:
    55
    Симпатии:
    11
    Пробовал реализовать схожий функционал у себя. С двумя таблицами отлично.

    А вот если мне необходимо сравнивать 50? как маштабировать? и при этом не занимать много процесорного времени?
     
Статус темы:
Закрыта.