Имеется скрипт: Code: <? /* Замените нижеследующие переменные на свои */ $host = "1"; // MySQL server $user_db = "1"; // MySQL пользователь $pass_db = "1"; // MySQL пароль $dbase = "1"; // MySQL база данных $dtable = "link"; // Таблица в базе данных /* Соединение с сервером базы данных */ mysql_connect ($host, $user_db, $pass_db); /* Выбор базы данных */ mysql_select_db($dbase); /* Создание SQL запроса */ $sql = "SELECT id_link, name FROM $dtable ORDER BY RAND() LIMIT 7"; /* Исполнение SQL запроса */ $result = mysql_query($sql); /* Проверка количества вернувшихся строчек в результате*/ $rows = mysql_num_rows($result); /* Если нет результата или результат меньше 1, то предупредить нас об этом или вывести результат*/ if ((!$rows) || ($rows < 1)) {echo "Результатов НЕТ!!!";} else { echo "<br><a href='page-o$id_link.html'>$name</a><br>"; while(list($id_link, $name ) = mysql_fetch_row($result)) { echo ""; if(empty($button)) echo "<br><a href='page-o$id_link.html'>$name</a><br>"; } } echo ""; ?> Как сделать, чтобы рандомайзер не сразу срабатывал, а через 5 - 10 часов? Либо выводил последние 10 записи?
Все-таки решил сделать рандомайзер отсроченым! Создать таблицу, а потом обращаться и смотреть дату, далее рандомить (люди подсказали сделать так)!
Таблицу создал CREATE TABLE eu_random_delayed ( id smallint(5) unsigned NOT NULL auto_increment, ldate datetime NOT NULL, PRIMARY KEY (id) );
Что дальше делать? По-логике дописывать файл, содержание которого приведено выше! Что дописывать, не знаю!
PHP: <? /* Замените нижеследующие переменные на свои */ $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 запроса */ $sql = "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"; /* Исполнение SQL запроса */ $result = mysql_query($sql); /* Проверка количества вернувшихся строчек в результате*/ $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)) { $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>"; ?>
интегрировать в твой код некогда .. но примерно вот такой выбор по дате последнего обновления рандома PHP: <? //вот эту таблу ты создал. в ней будем хранить дату последнего рандома. /*CREATE TABLE eu_random_delayed ( id smallint(5) unsigned NOT NULL auto_increment, ldate datetime NOT NULL, PRIMARY KEY (id) );*/ $sql = "SELECT ldate FROM eu_random_delayed where ldate > (now() - INTERVAL 1 DAY)"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if ((!$rows) || ($rows < 1)) { //тут идет код с рандомом //и проапдейтим последнюю дату рандома $sql = "insert into eu_random_delayed(ldate) values(now())"; mysql_query($sql); } else { //тут идет код без рандома } ?> п.с. я не пхп-программер.. если наду будет на руби )) то будет полный код
Вариант понятен, но не понятно его внедрение. Если оказывается, что один день не прошел, то какие данные должен вывести скрипт? Очевидно точь-в-точь с предыдущим рандомом. Тогда, как он знает, какие строки он выбирал в преды дущем рандоме?
если так то нужно создать еще одну промежуточную таблицу. в которую выводить результаты последнего рандома.
Тогда ситуация в корне меняется! У меня вывод рандома по 5 нужным мне категориям! Рандом и скрипта, который инклудится убираем. А ситуация такая: Каждые сутки или иной интервал, скриптец запусакется и рандобно выбирает данные из указанных категорий!
Подсказали такой вариант: Главная таблица eu_add 1. Создать таблицу eu_add_random , в которой будет ифа, к ней, собственно, скрипт из инклуда будет обращаться, а не к eu_add; (Это не проблема - знаю как сделать) 2. Скрипт, который будет пополнять таблицу eu_add_random из таблицы eu_add раз в сутки? Как он будет запускаться? (Можно ли не кроном? Или крон опитимальный варант?)
можно не кроном... для этого при каждом запросе к скрипту будет выполняться минимум 1 лишний запрос к базе. поэтому лучше кроном.
Тогда я делаю так: 1. Делаю дубликат таблицы eu_add и называю ее eu_add_random 2. Создаю пхп-файл, который собственно крон и должен запускать. 3. В файле пишу, копировать из eu_add в eu_add_random из таких категорий, случайним образом. И все!
PHP: <? /* Замените нижеследующие переменные на свои */ $host = "localhost"; // MySQL server $user_db = ""; // MySQL пользователь $pass_db = ""; // MySQL пароль $dbase = ""; // MySQL база данных $dtable = "eu_ad"; // Таблица в базе данных $dtable_rnd = "eu_add_random"; // Таблица в базе данных /* Соединение с сервером базы данных */ mysql_connect ($host, $user_db, $pass_db); /* Выбор базы данных */ mysql_select_db($dbase); /* Создание SQL запроса */ $sql = "SELECT link_id, images, v_title, v_255_12, v_descr, catid, rand() AS rnd FROM $dtable WHERE ((catid=471)OR(catid=473) OR(catid=474) OR(catid=475)OR(catid=476)) GROUP BY link_id ORDER BY rnd LIMIT 5"; $sql = "INSERT link_id, images, v_title, v_255_12, v_descr, catid INTO $dtable_rnd"; ?>
SELECT link_id, images, v_title, v_255_12, v_descr, catid, rand() AS rnd INTO $dtable_rnd FROM $dtable WHERE ((catid=471)OR(catid=473) OR(catid=474) OR(catid=475)OR(catid=476)) GROUP BY link_id ORDER BY rnd LIMIT 5";
А не проще ли вместо извращений с БД выводить результат запроса в файл и его просто инклудить? Преимущества на лицо - в десятки раз уменьшаем количество запросов к базе (так как надо раз обновлять файл раз в час/сутки), не надо создавать лишних, да и ненужных таблиц Получится что-то вроде: PHP: $filetime=lstat('news.txt'); // Получаем массив информации о файле $cur=time()-$ftime[9]; // Получаем время прошедшее с последней модификации файла if ($cur>2500) // Если прошло больше 2500 секунд, то делаем запрос к БД { $f=fopen('news.txt','w'); // Все echo заменяем на $out.= // Чтобы собрать в эту переменную все данные которые надо выводить $host = "localhost"; // MySQL server $user_db = ""; // MySQL пользователь $pass_db = ""; // MySQL пароль $dbase = ""; // MySQL база данных $dtable = "eu_ad"; // Таблица в базе данных mysql_connect ($host, $user_db, $pass_db); mysql_select_db($dbase); $sql = "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"; $result = mysql_query($sql); $rows = mysql_num_rows($result); $out=""; if ((!$rows) || ($rows < 1)) {$out.="Результатов НЕТ!!!";} else { $out.="<table width=500 class=last_pellets>"; while(list($id_link, $images, $v_title, $v_255_12, $v_descr ) = mysql_fetch_row($result)) { $images = explode( "\n", $images ); $images = $images[0]; $v_descr=strip_tags($v_descr); $v_descr=substr($v_descr,0,150); $out.= "<tr><td>"; if(empty($images)) echo ""; else $out.= "<a href='page-o$id_link.html'><img src='files/$images' width=60 class=imgConf></a>"; $out.="</td><td><a href='page-o$id_link.html'>$v_title</a> $v_descr ... </td><td>$v_255_12</td></tr>"; } } $out.="</table>"; fwrite($f,$out);fclose($f); // Записываем в файл } echo file_get_contents('news.txt'); // Всегда выводим содержимое файла