Гость_Роман
10.01.2010 - 03:11
Здравствуйте!
Необходимо для сайта сделать случайный вывод данных из MySQL. Не могу придумать алгоритм... Мне надо чтоб на экран вывело каждый раз при просмотре страницы рандомно 6 картинок (ссылки на картинке в БД). Но в БД большая часть не имеет ссылок. Я воспринимаю алгоритм так:
1. Фильтруем из БД все строки с сылками
2. Рандомно из массива берем 6 ссылок и выводим эти картинки на экран.
С первым все понятно. Со вторым? Как сделать чтоб взяло случайно 6 ссылок? Ну одну нет проблем я понимаю.
$pic1=rand(0,$kol);
echo $pic1;
А как шесть вывести? 6 раз повторить процедуру? Но есть шанс повтора... А повторов не должно быть. Общее количество не так велико. На данный момент 43 ссылки и шанс повтора велик. А мне надо чтоб все 6 разные были.
sergeiss
10.01.2010 - 03:18
В запросе добавь
ORDER BY RAND() LIMIT 6
Или RANDOM() - не помню точно
И получишь именно 6 случайных, неповторяющихся значений (если они в таблице уникальные, конечно).
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
ApuktaChehov
10.01.2010 - 03:22
Тебе лучше обозначить как-нибудь поля в БД с ссылками, что бы делать выбор только по ним.
Вот что то типа того:
mysql_query("SELECT * FROM table WHERE status = 'ssilka' ORDER BY RAND() LIMIT 6");
_____________
Емае. Хочется обозвать себя....Как опазорился. Я и забыл вообще что точно обращением же можно взять))) Новый год сделали свое дело. Спасибо большое.
Гость_Илья
8.05.2012 - 23:51
Ребят а можно как нибудь сделать что бы из БД выводилась информация согласно дню который на данный момент сейчас, т.е. если сегодня 08.05.2012 то выводилоась бы информация с полем дата идентичное сегоднешнему числу и т.д. наступило завтра автоматом появиласьь новость на завтра?
Цитата (Гость_Илья @ 8.05.2012 - 23:51) |
Ребят а можно как нибудь сделать что бы из БД выводилась информация согласно дню который на данный момент сейчас, т.е. если сегодня 08.05.2012 то выводилоась бы информация с полем дата идентичное сегоднешнему числу и т.д. наступило завтра автоматом появиласьь новость на завтра? |
Можно
Гость_Илья
9.05.2012 - 09:39
Kuliev
Можешь посоветовать что-нибудь или код примерный написать, а может запрос есть специальный для этих целей?
sergeiss
9.05.2012 - 12:32
Цитата (Гость_Илья @ 8.05.2012 - 23:51) |
Ребят а можно как нибудь сделать что бы из БД выводилась информация согласно дню который на данный момент сейчас, т.е. если сегодня 08.05.2012 то выводилоась бы информация с полем дата идентичное сегоднешнему числу и т.д. наступило завтра автоматом появиласьь новость на завтра? |
Цитата (Гость_Илья @ 9.05.2012 - 09:39) |
Можешь посоветовать что-нибудь или код примерный написать, а может запрос есть специальный для этих целей? |
Код сам напиши, он не сложный. Использую функцию NOW() из БД. Она возвращает текущие дату-время. Выбери из неё только дату, как это сделать - см. хэлп по твоей БД. И сравнивай с датой новости.
Только учти, что если ты делаешь сайт для широкого круга людей, то они могут быть в разных часовых поясах. Надо это как-то учитывать. Либо АЯКСом дату передавать, либо еще как-то.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Гость_Илья
9.05.2012 - 14:45
sergeiss
(SELECT *FROM название таблици NOW (date) ORDER BY date DESC)
где date строка где хранится дата и число, да? Примерно так я понял?
Demonikr
14.05.2013 - 14:31
$result = mysql_query ("SELECT * FROM `models` ORDER BY RAND() LIMIT 6 ");
if (!$result)
exit("<p>Запрос не может быть выполнен!</p>");
echo "<table class='table' width='940' border='0' cellspacing='0' cellpadding='0'><tr>";
$row = mysql_num_rows($result);
$row = (($row%1) == 0)? $row:$row+1;
for($i=1; $i <= $row; $i++)
{
$myrow = mysql_fetch_assoc($result);
echo "<td>
".$myrow['name']." \\ Что угодно картинка или текст
</td>" ;
if(($i%3) == 0 )
echo "</tr>";
}
echo "</table>";
Demonikr
14.05.2013 - 14:35
$result = mysql_query ("SELECT * FROM `models` ORDER BY RAND() LIMIT 6 ");
if (!$result)
exit("<p>Запрос не может быть выполнен!</p>");
echo "<table class='table' width='940' border='0' cellspacing='0' cellpadding='0'><tr>";
$row = mysql_num_rows($result);
$row = (($row%1) == 0)? $row:$row+1;
for($i=1; $i <= $row; $i++)
{
$myrow = mysql_fetch_assoc($result);
echo "<td>
".$myrow['name']." "\\Что угодно картинка или текст"
</td>" ;
if(($i%3) == 0 ) \\количество столбцов
echo "</tr>";
}
echo "</table>";
Проблема только в том, что при таком условии ORDER BY RAND() будет нагрузка с большой базой, так как идет перекладывание всей таблицы.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.