обновление прайс листов

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

Статус темы:
Закрыта.
  1. pointer

    pointer Создатель

    Регистр.:
    24 окт 2011
    Сообщения:
    14
    Симпатии:
    1
    добрый день..
    возник вопрос по поводу обновления прайс листов на сайте. Прайсы должны обновляться раз в сутки.
    сейчас в таблице 568071 записей.
    Структура:
    Код:
    Id, Sub_id, Class_id, user_id, Name, Desc, price, price_min, supplier;
    Id PRIMARY
    обновление идет по supplier= поставщик : id в их базе;
    PHP:
    <?php
    function q($query$ignore_errors false)
    {
        global 
    $LinkID;

        if (
    $GLOBALS["ENABLE_BENCHMARK"]) starttimer("SQLQ0");

        
    $res mysql_query($query,$LinkID);
        if (
    $GLOBALS["PRINT_QUERIES"]) print "<![CDATA[<pre><font color=red>$query</font> [<font color=blue>".mysql_affected_rows()."</font>]</pre><hr>]]>";

        if (
    mysql_error())
        {
            
    //if (!$ignore_errors) { user_error(mysql_error()."\n<br><b>Query:</b> <pre>$query</pre>\n"); }
            
    print mysql_error()."\n<br><b>Query:</b> <pre>$query</pre>\n";
            return 
    false;
        }
        else
        {

            if (
    $GLOBALS["ENABLE_BENCHMARK"])
            {
                
    $e stoptimer("SQLQ0""SQL"$query); // NOT LOGGED FOR QUERIES CAUSED ERROR
                
    if ($GLOBALS["PRINT_QUERIES"]) { print "<font color=green>$e</font>"; }
            }

            return 
    $res;
        }
    }
    function 
    value($query)
    {
        return @
    mysql_result(q($query),0,0);
    }
    @
    $file fopen($TMP_FOLDER.'price.csv''r') or die('Ошибка');
    flock($file1);
    $i=1;
    while(!
    feof($file)) {
        
    $Mass fgetcsv($file1024';');
        
    $suplier='sklad1:'.$Mass[0];
        
    $sql value("SELECT COUNT(Name) FROM `Table` WHERE `supplier`='$suplier'");
        if (
    $sql==0){
            
    q("INSERT table ....");
        }else{
            
    q("UPDATE table ....");
        }
    }
    ?>
    обновляется очень долго.. запуская в консоли запрос работает почти час, а если запускать без проверки секунд 20 всего. Как можно ускорить работу скрипта при проверке существования

    UPD:
    Спасибо большое.. все заработало..
     
    Последнее редактирование модератором: 9 сен 2013
    Шумадан нравится это.
  2. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.723
    Симпатии:
    2.100
    на поле supplier установлен индекс?
    вам не нужно делать выборку для проверки
    Код:
    $sql = value("SELECT COUNT(Name) FROM `Table` WHERE `supplier`='$suplier'");
    а просто используйте правильно
    http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

    тоесть, даже (может и не подойти) такая конструкция http://dev.mysql.com/doc/refman/5.0/en/replace.html
    Код:
    REPLACE into table (id, name, age) values(1, "A", 19)
     
    Последнее редактирование: 3 сен 2013
    pointer нравится это.
Статус темы:
Закрыта.