Есть несколько задач, для которых необходимо в случайном порядке выдавать на страницу несколько записей, считываемых из базы данных. Например, это может быть баннерная крутилка или раздел сайта «случайная мысль». Так вот, можно реализовать эту задачу несколькими способами, и о двух из них я бы хотел рассказать в этом уроке.
Вот таким обраом я сделал свой первый скрипт, который печатал на странице случайный афоризм:
.... // database connection code $query = "select * from quotes"; $result = mysql_query($query); $randval = rand(0, mysql_num_rows($result) - 1); $quotetext = mysql_result($result, $randval, 1); $quoteauthor = mysql_result($result, $randval, 2); print "$quotetext<br>$quoteauthor";
Что делает этот код ? Сначала мы формируем sql запрос, который вытаскивает все записи из таблицы quotes. Затем мы генерируем случайное число, которое не превышает количества записей, полученных из базы данных. С помощью функции mysql_result() мы получаем случайную запись, то есть мы используем случайное значение, как номер ряда в возвращаемом наборе. Третий аргумент этой функции — это номер колонки, то есть поле записи, в котором хранится то, что надо выдать.
Итак, недостатки этого кода очевидны:
1.) Перед тем, как использовать генератор случайных чисел, нам нужно где-то выше в программе предварительно инициализировать этот генератор. Кстати это делает функция srand().
2.) Придется все время хранить в уме номер колонки в которой хранится нужная информация. А если вдруг количество колонок в таблице изменится, нам придется изменять такой код.
Теперь давайте рассмотрим другой код, который делает тоже самое, но уже более удобным способом.
$query = "select * from quotes order by rand() limit 1"; $result = mysql_query($query); $row = mysql_fetch_array($result); print($row['text'] . '<br>' . $row['author']);
В этом примере случайные значения генерирует сам сервер базы данных и возвращает каждый раз разные строки. Немного изменив код, можно выводить всю таблицу в случайном порядке:
$query = "select * from quotes order by rand()"; $result = mysql_query($query); while($row = mysql_fetch_array($result)){ print($row['text'] . '<br>' . $row['author'] . '<hr>'); }
Разве этот вариант не лучше ?
Я думаю, что лучше !
Источник: internet-technologies.ru