function copyDailyDataAndReset()
{
    $db = db();
    error_log('copy daily data');
    $db->beginTransaction();
    $db->prepare('
		insert into monthlyresults_google
			select null as id, project, pos, keyword, NOW() as checkdate
				from results_google
	')->execute();
    $db->prepare('update results_google
		set posprev = pos, process = 0')->execute();
    $db->prepare('
		insert into monthlyresults_mail
			select null as id, project, pos, keyword, NOW() as checkdate
				from results_mail
	')->execute();
    $db->prepare('update results_mail
		set posprev = pos, process = 0')->execute();
    $db->prepare('
		insert into monthlyresults_yandex
			select null as id, project, pos, keyword, region_code, region_name, NOW() as checkdate
				from results_yandex
	')->execute();
    $db->prepare('update results_yandex
		set posprev = pos, process = 0')->execute();
    $db->commit();
    updateProjectsKeywords();
    error_log('resets num = 0');
    setResetsNum(0);
    error_log(getResetsNum());
}
function resetErrorKeywordsPos($type)
{
    $db = db();
    //error_log('no data for processing ' . $type);
    $numResets = getResetsNum();
    if ($numResets < 2) {
        // limit resets errors keywords pos
        error_log('reset errors keywords pos - ' . $numResets);
        $db->prepare('update results_' . $type . '
			set pos = greatest(posprev, 0), process = 0
			where process = 1 and pos < 0')->execute();
        setResetsNum($numResets + 1);
    }
}