Сообщение от
REBUUS
есть таблица t1 на сервере S1 и точна такая же таблица t2 у меня на локалхосте S2
мне надо периодический переносить новые записи которые появляются на в таблице t1 к себе на локалхост в таблицу t2, т.е организовать синхронизация , таблица на локалхосте t2 сам не меняется только при синхронизации добавляються новые записи из t1.
А теперь внимание вопрос))) как мне это грамотно организовать, что бы быстро все делалось. как ни будь я сам могу сделать, но не нужно грамотно организовать это

Я привык к тому, что доступа к удаленному MySQL нету, следовательно либо использовать тулзы для PHP tunneling, либо делается скрипт синхронизации. Суть такова - серверный скрипт при коннекте проверяет подлинность клиента и в случае подтверждения обрабатывает параметры запроса, проверяет изменившиеся данные, генерирует выдачу и возвращает её. Проверка идет таким образом: вначале на S1 пропускается SELECT `какой-то-id` FROM `t1`; и если mysql_num_rows соответствует присланному количеству строк, то возвращаем ответ, что различий нет. Далее mysql_free_result (можно её и не вызывать, если записей немного) и читаем из запроса список уникальных ключей (например, если есть ID с auto_increment, то их список лучше всего), а затем делаем выборку всех полей в том порядке, в котором они идут в таблице:
SELECT `field1`,`field2`,`field3`,...`fieldN` FROM `t1` WHERE `уникальный-ключ` NOT IN ('список','уникальных','ключе й','переданный','клиентом');
=>
while ( $row = mysql_fetch_assoc ( $q ) )
{
и далее пишем строку:
$string = 'INSERT INTO `t2` VALUES (';
$values = array();
А потом:
foreach ( $row as $value ) $values[] = " '$value' "; # кавычки лучше ставить вместе - написал через пробелы, чтобы видно было.
$string .= implode ( ',' , $values ); # в итоге будет строка вида ` INSERT INTO `t2` VALUES ('value1','value2','value3',...,'valueN' `
$string .= ")\r\n";
Ну и потом, соответственно, выдача этого результата в ответ.
Клиентская часть должна через cURL (либо другим способом) забирать результат и, если он не пустой (т.е. изменений нет), выполнять его. То есть при запуске скрипта, он делает выборку уникальных полей и в запрос пишет количество записей в таблице t2 и список уникальных полей, а после забирает то, что возвращает сервер, и выполняет запрос. Еще желательно разбить запрос, например, explode (";\r\n",$response); и выполнять по отдельности, чтобы, в случае необходимости, знать, какая строка ошибку генерирует.
Вот и всё!!!!!!!
