Какая конструкция работает быстрее и оптимальнее ?

Discussion in 'PHP' started by serg-php, 18 Dec 2011.

  1. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Нужно выводить рандомно записи из нескольких категорий.

    Ранее использовал такую конструкцию

    Варинт 1
    Инклудил файл

    PHP:
    $filetime=lstat('files/random_entries.txt'); // Получаем массив информации о файле 
    $cur=time()-$filetime[9]; // Получаем время прошедшее с последней модификации файла 
    if ($cur>2500// Если прошло больше 2500 секунд, то делаем запрос к БД 

    $f=fopen('files/random_entries.txt','w');  

    // Все echo заменяем на $out.=  
    // Чтобы собрать в эту переменную все данные которые надо выводить 

    $host "localhost";    // MySQL server
    $user_db "111111";        // MySQL пользователь
    $pass_db "111111";            // MySQL пароль
    $dbase "222222";        // MySQL база данных
    $dtable "eu_entries";        // Таблица в базе данных

    mysql_connect ($host$user_db$pass_db); 
    mysql_select_db($dbase); 
    mysql_query("SET NAMES 'cp1251'");

    $sql "SELECT link_id, images, catid, v_title, v_255_13, v_descr, rand() AS rnd FROM $dtable WHERE ((catid=403)OR(catid=404)) AND images!='' GROUP BY link_id ORDER BY rnd LIMIT 800"

    $result mysql_query($sql); 
    $rows mysql_num_rows($result); 
    $out=""
    if ((!
    $rows) || ($rows 1)) {$out.="Результатов НЕТ!!!";} 
    else { 
          
    $out.=" "
          while(list(
    $id_link,  $images$catid$v_title$v_255_13$v_descr ) = mysql_fetch_row($result)) { 
    $images explode"\n"$images ); 
    $images $images[0]; 

          
    $v_descr=strip_tags($v_descr);
          
    $v_descr=str_replace(' ',' ',$v_descr);
          
    $v_descr=str_replace('.','. ',$v_descr);
          
    $v_descr=str_replace(',',', ',$v_descr);
          
    $v_descr=str_replace('(',' (',$v_descr);
          
    $v_descr=str_replace(')',') ',$v_descr);
          
    $v_descr=str_replace('  ',' ',$v_descr); 
     

    $v_alt=substr($v_title,0,20);
    $v_title=substr($v_title,0,26);
    $v_descr=substr($v_descr,0,71);
    $v_descr=mb_strtolower($v_descr);

           
    $out.= ""
               if(empty(
    $images)) 
                 echo 
    ""
                 else 
                
    $out.= "<a href=\"page-o$id_link.html\"><img src=\"files/small/$images\" width=\"60\" class=\"imgThum\"></a>";  
                
    $out.="<div class=\"pdsc\"><a href=\"page-o$id_link.html\">$v_title</a> $v_descr $v_255_13 <span>»</span></div></div>"

           } 
    $out.=""
    fwrite($f,$out);fclose($f); // Записываем в файл 

    echo 
    file_get_contents('files/random_entries.txt'); // Всегда выводим содержимое файла 

    ?>
    Вариант 2 сделать вывод через функцию

    PHP:
     function block_RandomEntries_Browse(&$tpl$args ''){
     global 
    $db;

      
    $hw_num = isset($args['amount']) ? abs(intval($args['amount'])) : 10;

      
    $mass $db->one_col_array("SELECT link_id FROM ".TBL_AD." WHERE ((catid=403)OR(catid=404)) AND approved='1'  AND user_approved='1' AND images!=''");    

      
    shuffle($mass);
      
      
    $tmp array_slice($mass0$hw_num);
      
      
    $zap=implode(',',$tmp);
      
           
    $ql 'SELECT link_id, 
                        v_title  AS f_title,
                v_descr  AS f_descr,
                images FROM '
    .TBL_AD.
              
    ' WHERE link_id IN ('.$zap.')'.
              
    ' ORDER BY link_id DESC';
          
     
      
    $res $db->query($ql);
     
       while(
    $v mysql_fetch_assoc($res)){
        
        
    $v['f_title'] = Cut_Text_by_words($v['f_title'], 40);
        
    $v['f_descr'] = strip_tags($v['f_descr']);
        
    $v['f_descr'] = Cut_Text_by_words($v['f_descr'], 70);
        
            
    $tpl->AddCell('b_RandomEntries_Browse'hwSQLRowGet($v));
          }
          
        }


    Какой из предложенный вариантов быстрее работает и почему?

    Как во второй вариант добавить интервал смены рандомных позиций 10 - 20 мин.?
     
  2. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    140
    Reputations:
    4