Jump to content
Sign in to follow this  
vcat

[Решено] SQL запросы через планировщик задач

Recommended Posts

Помогите пожалуйста с решением такой задачи - сайт на Opencart 1.5.5.1, версия SQL - 5.5.4, сайт ежедневно синхронизируется с поставщиков, от которого в базу попадают некоторые некорректные опции. Путем автозамены в SQL их регулярно заменяется, но вручную ежедневно это просто неоправдано.

Задача:

выполнение через event_scheduler в определенное время (ежедневно в 6.00 утра) нескольких запросов типа

UPDATE `oc_product_option_value` SET `product_option_value_id` = REPLACE(`product_option_value_id`, '245277', '12477')

UPDATE `oc_product_option_value` SET `product_option_value_id` = REPLACE(`product_option_value_id`, '4245', '2256')

....

UPDATE `oc_product_option_value` SET `product_option_value_id` = REPLACE(`product_option_value_id`, '32145', '15786')

 

таких запросов - около десятка

 

Буду очень благодарен за подсказку, как это можно прописать.

 

 

Share this post


Link to post
Share on other sites

написать на php скромненький скриптик с этими запросами

Share this post


Link to post
Share on other sites

написать на php скромненький скриптик с этими запросами

тогда это уже ставить не в планировщик SQL, а в выполнение по крону?

Share this post


Link to post
Share on other sites

да, по крону. легко и надежно

Share this post


Link to post
Share on other sites


<?php

include 'config.php';

mysql_connect(DB_HOSTNAME,DB_USERNAME,DB_PASSWORD) or DIE(mysql_error());

mysql_select_db(DB_DATABASE) or die(mysql_error());

mysql_set_charset("UTF8");

$query = mysql_query("update.....");

mysql_close();

  • +1 1

Share this post


Link to post
Share on other sites

А в случае подтягивания sql скриптов из файла, так:

$lines = file(__DIR__.'/restore_sql.txt');

if ($lines) {
    $sql = '';
    foreach($lines as $line) {
        if ($line && (substr($line, 0, 2) != '--') && (substr($line, 0, 1) != '#')) {
            $sql .= $line;

            if (preg_match('/;\s*$/', $line)) {
                // Выполняем $sql
                ....
                $sql = '';
            }
        }
    }

Share this post


Link to post
Share on other sites

<?php
class ControllerToolMyscript extends Controller {
    public function index() {
              $sql = "ваш запрос";
              $sql .= "ваш запрос";
              $sql .= "ваш запрос";
              $sql .= "ваш запрос";
              $sql .= "ваш запрос";
	      $query = $this->db->query($sql);	  
    }
}

Можно еще создать файл myscript.php положить его в catalog/controller/tool

Дергать потом по адресу  /index.php?route=tool/myscript

Share this post


Link to post
Share on other sites

чет добрые сегодня программисты. Никого не послали, а дали сразу несколько хороших ответов в тему.

Share this post


Link to post
Share on other sites

Спасибо огромнейше Вам всем - даже не ожидал, что сразу столько хороших советов пойдет!

Иду проверять их )

Share this post


Link to post
Share on other sites

Э...

 

Советы советами

Но выполнять крон без "авторизации" дело очень плохое

 

1. Делаем в админке небольшое  расширение, для ввод security_code

 

2. В кроне запускаем через wget  /index.php?route=tool/myscript&security_code=!@#$%$^%^&

 

3. В скрипте проверяем...

Share this post


Link to post
Share on other sites

Ну и я вставлю свои 5 коп

<?php
class ControllerToolMyscript extends Controller {
    public function index() {
        if (isset($this->request->get['security_code']) {
              $sqls = array(
                 "ваш запрос",
                 "ваш запрос"
              };
              foreach ($sqls as $sql) {
	        $query = $this->db->query($sql);	  
              }
        }
    }
}

Share this post


Link to post
Share on other sites

 

Ну и я вставлю свои 5 коп

<?php
class ControllerToolMyscript extends Controller {
    public function index() {
        if (isset($this->request->get['security_code']) {
              $sqls = array(
                 "ваш запрос",
                 "ваш запрос"
              };
              foreach ($sqls as $sql) {
	        $query = $this->db->query($sql);	  
              }
        }
    }
}

а можно просто сюда вписать данные авторизации, без дополнительного расширения в админке?

 

как писал товарищ nikifalex выше, так понимаю, в его варианте уже предусмотрена авторизация из данных конфига?

 

<?php
include 'config.php';

mysql_connect(DB_HOSTNAME,DB_USERNAME,DB_PASSWORD) or DIE(mysql_error());
mysql_select_db(DB_DATABASE) or die(mysql_error());
mysql_set_charset("UTF8");


$query = mysql_query("update.....");

mysql_close();

Share this post


Link to post
Share on other sites

нет у меня авторизации. Сюда по всему, пока Вы не поняли вообще как все работает.

 

Я бы просто закрыл доступ снаружи к скрипту хоть бы через htaccess. И не надо никакую авторизацию. Но это уже совсем другая история

Share this post


Link to post
Share on other sites

нет у меня авторизации. Сюда по всему, пока Вы не поняли вообще как все работает.

 

Я бы просто закрыл доступ снаружи к скрипту хоть бы через htaccess. И не надо никакую авторизацию. Но это уже совсем другая история

да, тут Вы правы - действительно не разобрался, теперь понемножку проясняется принцип

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.