Главная страница статей --> Советы по фотошопу, графике и хитрости в построении php кода

Выбор из БД в случайном порядке на PHP

Источник: realcoding.net

Есть несколько задач, для которых необходимо в случайном порядке выдавать на страницу несколько записей, считываемых из базы данных. Например, это может быть баннерная крутилка или раздел сайта "случайная мысль". Так вот, можно реализовать эту задачу несколькими способами, и о двух из них я бы хотел рассказать в этом уроке.

Вот таким обраом я сделал свой первый скрипт, который печатал на странице случайный афоризм:

.... // 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>);
}

Разве этот вариант не лучше ?
Я думаю, что лучше !



Похожие статьи:
- Памятка начинающим хостерам по затыканию дырок в PHP
- Как разбивать запрос на страницы (постраничный вывод данных)?
- Мягкое повышение ИЦ и PR
- Php блокировка
- Что такое PageRank Googleа и как получить его по максимуму
- Бизнес на подкастах - уже реальность
- Дата на русском языке
- DDOS-атаки и методы борьбы с ними
- PHP пример парсинга URL для «User Friendly URLs»
- Неоправданное использование ООП
- Рисуем Елку


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |

Контакты
Редакция:
[0.001]