[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Случайный вывод данных из БД
Гость_Роман
Здравствуйте!

Необходимо для сайта сделать случайный вывод данных из MySQL. Не могу придумать алгоритм... Мне надо чтоб на экран вывело каждый раз при просмотре страницы рандомно 6 картинок (ссылки на картинке в БД). Но в БД большая часть не имеет ссылок. Я воспринимаю алгоритм так:

1. Фильтруем из БД все строки с сылками
2. Рандомно из массива берем 6 ссылок и выводим эти картинки на экран.

С первым все понятно. Со вторым? Как сделать чтоб взяло случайно 6 ссылок? Ну одну нет проблем я понимаю.

$pic1=rand(0,$kol);
echo $pic1;

А как шесть вывести? 6 раз повторить процедуру? Но есть шанс повтора... А повторов не должно быть. Общее количество не так велико. На данный момент 43 ссылки и шанс повтора велик. А мне надо чтоб все 6 разные были.
sergeiss
В запросе добавь
ORDER BY RAND() LIMIT 6

Или RANDOM() - не помню точно smile.gif

И получишь именно 6 случайных, неповторяющихся значений (если они в таблице уникальные, конечно).

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
ApuktaChehov
Тебе лучше обозначить как-нибудь поля в БД с ссылками, что бы делать выбор только по ним.
Вот что то типа того:
mysql_query("SELECT * FROM table WHERE status = 'ssilka' ORDER BY RAND() LIMIT 6");


_____________
Guest
Емае. Хочется обозвать себя....Как опазорился. Я и забыл вообще что точно обращением же можно взять))) Новый год сделали свое дело. Спасибо большое.
Гость_Илья
Ребят а можно как нибудь сделать что бы из БД выводилась информация согласно дню который на данный момент сейчас, т.е. если сегодня 08.05.2012 то выводилоась бы информация с полем дата идентичное сегоднешнему числу и т.д. наступило завтра автоматом появиласьь новость на завтра?
Kuliev
Цитата (Гость_Илья @ 8.05.2012 - 23:51)
Ребят а можно как нибудь сделать что бы из БД выводилась информация согласно дню который на данный момент сейчас, т.е. если сегодня 08.05.2012 то выводилоась бы информация с полем дата идентичное сегоднешнему числу и т.д. наступило завтра автоматом появиласьь новость на завтра?

Можно
Гость_Илья
Kuliev
Можешь посоветовать что-нибудь или код примерный написать, а может запрос есть специальный для этих целей?
sergeiss
Цитата (Гость_Илья @ 8.05.2012 - 23:51)
Ребят а можно как нибудь сделать что бы из БД выводилась информация согласно дню который на данный момент сейчас, т.е. если сегодня 08.05.2012 то выводилоась бы информация с полем дата идентичное сегоднешнему числу и т.д. наступило завтра автоматом появиласьь новость на завтра?

Цитата (Гость_Илья @ 9.05.2012 - 09:39)
Можешь посоветовать что-нибудь или код примерный написать, а может запрос есть специальный для этих целей?

Код сам напиши, он не сложный. Использую функцию NOW() из БД. Она возвращает текущие дату-время. Выбери из неё только дату, как это сделать - см. хэлп по твоей БД. И сравнивай с датой новости.
Только учти, что если ты делаешь сайт для широкого круга людей, то они могут быть в разных часовых поясах. Надо это как-то учитывать. Либо АЯКСом дату передавать, либо еще как-то.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Гость_Илья
sergeiss
(SELECT *FROM название таблици NOW (date) ORDER BY date DESC)
где date строка где хранится дата и число, да? Примерно так я понял?
Demonikr
$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

$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>";
715kg
Проблема только в том, что при таком условии ORDER BY RAND() будет нагрузка с большой базой, так как идет перекладывание всей таблицы.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.