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

Статус
В этой теме нельзя размещать новые ответы.

palbanec

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

Поможет кто? Или есть другое предложение?
 
Например запускать каждый час скрипт в котором вытащить время обновления обоих таблиц
Код:
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;
 
polyetilen, не понял. А на месте сравнить нельзя?
Может кто поможет?

Поможет кто?????
 
можно структуру таблиц узнать?
и на чём Вам скрипт нужен? php?
 
Код:
[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. Что б например в крон поместить.
 
Да. Нужен на php. Что б например в крон поместить.
как быстро надо? а то времени мало, если можно попытаюсь написать до конца недели
я предполагая что в обоих таблицах у одинаковых данных (кроме прайс) одинаковый айди?

Скрытое содержимое доступно для зарегистрированных пользователей!


попробуйте, меняйте конечно под себя.
 
как быстро надо? а то времени мало, если можно попытаюсь написать до конца недели

Не быстро, как сможете.

я предполагая что в обоих таблицах у одинаковых данных (кроме прайс) одинаковый айди?

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

Ps: Я думал реализацию, так как на nic.ru не работают тригеры в базе. Нужно написать php скрипт и засунуть в крон.
Добавить в базу PRICE2 со старым значением, и если PRICE изменился, то при выполнение скриптом сравнения. Он будет посылать на указанный майл письмо с содержимым "ID+NAME+PRICE+PRICE2" c каждой новой строкой, следующие изменённые товары.Чтоб скрипт все проверил, а потом в сообщение все скупом отправил. Пример:
ID=35453 NAME=Товар PRICE=5454 PRICE2=4543
ID=35453 NAME=Товар PRICE=5454 PRICE2=4543
ID=35453 NAME=Товар PRICE=5454 PRICE2=4543
 
Самый примитивный и прямой вариант:
<?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"]); // обновляем вторую таблицу свежими данными
}
?>
 
Мб пригодится Для просмотра ссылки Войди или Зарегистрируйся
Там под запуск самим юзером сделано, но можно переделать, ес-но, на крон.
 
Пробовал реализовать схожий функционал у себя. С двумя таблицами отлично.

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