Отсроченный рандомайзер

Discussion in 'PHP' started by serg-php, 3 Aug 2008.

  1. serg-php

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

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Вот люди предлагают такой вариант:

    PHP:
    <?php
    /* SQL query
    CREATE TABLE IF NOT EXISTS `eu_random_delayed` (
      `id` tinyint(1) unsigned NOT NULL,
      `time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
      `link_ids` tinytext,
      PRIMARY KEY  (`id`)
    );

    INSERT INTO `eu_random_delayed` (`id`, `time`, `link_ids`) VALUES (1, NULL, NULL);
    */ 

    function EchoTable($sql) {
        
    $aLink_id = array();
        
    /* Исполнение SQL запроса */ 
        
    $result mysql_query($sql['select']); 
        
    /* Проверка количества вернувшихся строчек в результате*/ 
        
    $rows mysql_num_rows($result); 
        
    /* Если нет результата или результат меньше 1, то предупредить нас об этом или вывести результат*/ 
        
    if ((!$rows) || ($rows 1)) {
            echo 
    "Результатов НЕТ!!!";
        } else { 
              echo 
    "<table width=500 class=last_pellets>"
              while(list(
    $id_link$images$v_title$v_255_12$v_descr ) = mysql_fetch_row($result)) {
                  
    $aLink_id[] = $id_link;
                  
    $images explode"\n"$images ); 
                  
    $images $images[0]; 
                  
    $v_descr=strip_tags($v_descr); 
                  
    $v_descr=substr($v_descr,0,150); 

                  echo 
    "<tr><td>"
                  if (empty(
    $images)) 
                      echo 
    ""
                  else 
                      echo 
    "<a href='page-o$id_link.html'><img src='files/$images' width=60                     class=imgConf></a>";  


                  echo 
    "</td><td><a href='page-o$id_link.html'>$v_title</a>   $v_descr ... </td><td>$v_255_12</td></tr>"
              } 
        } 
        echo 
    "</table>";
        return 
    $aLink_id
    }

    /* Замените нижеследующие переменные на свои */ 
    $host "localhost";    // MySQL server 
    $user_db "";        // MySQL пользователь 
    $pass_db "";            // MySQL пароль 
    $dbase "";        // MySQL база данных 
    $dtable "eu_ad";        // Таблица в базе данных 

    /* Соединение с сервером базы данных */ 
    mysql_connect ($host$user_db$pass_db); 
    /* Выбор [HTML]базы данных */ 
    mysql_select_db($dbase); 

    $sql['link_ids'] = 'SELECT `link_ids`
            FROM `eu_random_delayed`
            WHERE `id` = 1
            AND `time` > (NOW() - INTERVAL 1 DAY)
            AND `link_ids` IS NOT NULL'
    ;
    $result mysql_query($sql['link_ids']); 
    if (
    mysql_num_rows($result) > 0) {
        
    $link_ids mysql_result($result0);
        
    $sql['select'] = 'SELECT `link_id`, `images`, `v_title`, `v_255_12`, `v_descr`, `catid`
                FROM ' 
    $dtable '
                WHERE `link_id` IN(' 
    $link_ids ')';
        
    EchoTable($sql); 
    } else {
        
    $sql['select'] = 'SELECT `link_id`, `images`, `v_title`, `v_255_12`, `v_descr`, `catid`, RAND() AS `rnd`
                FROM ' 
    $dtable '
                WHERE ((`catid` = 403) OR (`catid` = 404))
                GROUP BY `link_id`
                ORDER BY `rnd`
                LIMIT 5'

        
    $aLink_id EchoTable($sql);
        if (
    count($aLink_id) > 0) {
            
    $sql['insert'] = 'UPDATE `eu_random_delayed` SET
                              `link_ids` = "' 
    implode(','$aLink_id) . '"
                              WHERE `id` = 1'
    ;
            
    mysql_query($sql['insert']);
        }
    }

    ?>
    Что скажете?
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Посмотри выше, то же самое только не нужно десяток двадцатиэтажных мускульных запросов и скрипт практически умещается на коленке
     
    _________________________
  3. serg-php

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

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Gifts,

    это тоже вариант!
    Касательно нагрузки на систему может быть удачный!

    Где файл news.txt хранить?
    В корневой или глубже?
     
  4. serg-php

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

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    У меня вывод по 5 разделам! Это что 5 инклудов делать?
    Значит 5 файлов news.txt (news1.txt,news2.?
     
  5. serg-php

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

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Gifts, в товоем предложении что-то нето! - При каждом запросе разные данные выводятся, а они должны выводиться только через 24 часа!
     
  6. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Если у тебя есть скрипт, который при каждом открытии страницы выводит что-то там по 5 категориям, то вставляешь его между строчками
    $f=fopen('news.txt','w');
    и
    fwrite($f,$out);fclose($f);

    Тогда в течение 2500 у тебя будет появляться одна и та же страница с тем выводом, который ты хочешь. Файл news.txt может находиться где угодно, главное чтобы он был открыт для записи (права 777 на всякий случай) и чтобы в скрипте все ссылки были исправлены на новое местоположение этого файла

    Строчка
    PHP:
    $cur=time()-$ftime[9];
    Должно быть
    PHP:
    $cur=time()-$filetime[9];
     
    _________________________
    #26 Gifts, 15 Aug 2008
    Last edited: 15 Aug 2008
  7. serg-php

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

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    А я инклуд делал того файла который содержит код Gifts!
     
  8. serg-php

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

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Я бросил код Gifts в отдельный файл, который инклудил в index.php! Неправильно?
     
  9. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Ошибка в скрипте
    Строчка
    PHP:
    $cur=time()-$ftime[9];
    Должно быть
    PHP:
    $cur=time()-$filetime[9];
    Да, скрипт нужно инклудить

    Нормально он инклудится, только на всякий случай пути до news.txt нужно указывать абсолютные в скрипте
     
    _________________________
    #29 Gifts, 15 Aug 2008
    Last edited: 15 Aug 2008
  10. serg-php

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

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Как сделать, чтобы код Gifts в отдельном файле инклудить в index.php?
     
  11. serg-php

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

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Вообще в данной ситуации если инклуддить news.txt, то файл с кодом Гифтс, запускать кроном!
     
  12. serg-php

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

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Работает, Гифтс!

    Я говорю по пяти разделам!
    У меня согласно данному скрипту реализуется только по одному разделу!

    Получается 5 инклудов!

    Скрипта гифта, только с разным обращением к таблице!
     
  13. serg-php

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

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Например 1000 хостов в сутки 5 инклудов!

    Будет ли это максимально оптимальным вариантом реализации моего замысла?
     
  14. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    >.< Зачем кроном? Каждый раз пользователь заходя на страницу будет получать либо кешированную страницу, либо он своим заходом ее и обновит, лишние телодвижения совершать не надо. Задержка между обновлениями в строчке if ($cur>2500) Число 2500 - это количество СЕКУНД между обновлениями
     
    _________________________
    #34 Gifts, 15 Aug 2008
    Last edited: 15 Aug 2008
  15. serg-php

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

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Принято! Понятно! Согласен!

    А как быть по други вопросам?
     
  16. serg-php

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

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Вообще, Гифтс!

    Сейчас шлифую твой вариант! Весьма удачный, должен заметить!
     
  17. serg-php

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

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Вообщем, сделал 5 инклудов! Все выводит рандомится с интервалом 2500 секунд!
     
  18. serg-php

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

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Прошу тему пока не закрывать! Возможно, что-то работать не будет!
     
  19. serg-php

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

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Благодарю всех, кто мне помогал!

    Особенно благодарю Гифта его вариант настолько дельный.
    Жаль, что я раньше такого способа не знал!

    Заменил 2500 на 86400 и наслаждаюсь рандомизацией 1 в сутки!