Jump to content
  • 0

Случайный выбор записей из базы данных c помощью SQL (статья)


S ... (delete)
 Share

Question

Наткнулся тут на статью.

И решил е? переделать (вроде такой темы на форуме не было).

Случайный выбор записей из базы данных c помощью SQL

Одной из часто встречающихся задач при разработке web-приложения является случайная генерация записей из базы данных. Такая задача может возникнуть, например, при построении специального предложения на корпоративном сайте.

Напишем PHP-скрипт, который выбирает случайно три записи из таблицы базы данных MySQL. Ниже на скриншоте показан примерный вид тестовой таблицы:

screen_tbl_test.gif

1. Файл dbopen.php (открывает соединение с MySQL)

 <?php
$hostName = 'localhost';
$userName = 'yura';
$password = 'yura';
$databaseName = 'rnd';

$link=mysql_connect($hostName,$userName,$password);

if (!$link)
{
die('Ошибка при соединении с MySQL!');
}

if (!mysql_select_db($databaseName, $link))
{
die('Ошибка базы данных !');
}
?>

2. Файл test.php (основной скрипт)

<?php
require 'dbopen.php';

$sSQL = 'SELECT txt FROM test ORDER BY RAND() LIMIT 0,3';
$result = mysql_query($sSQL, $link);

if (!$result)
{
die('Ошибка запроса к БД ! '.mysql_error($link));
}

$arr = array();

while($row = mysql_fetch_array($result))
{
$arr[] = $row['txt'];
}

echo $arr[0] . '

';
echo $arr[1] . '

';
echo $arr[2] . '

';

?>

screen_result.gif

Link to comment
Share on other sites

12 answers to this question

Recommended Posts

  • 0
Где что читал, что ORDER BY RAND() работает медленно и сильно нагружает СУБД.

Абсолютно справедливое замечание. Я проверил сам - гораздо быстрее получить случайную запись средствами PHP, чем средствами MySQL:

http://forum.php.su/topic.php?forum=1&topic=222

Link to comment
Share on other sites

  • 0

Почитал я этот топик http://forum.php.su/topic.php?forum=1&topic=222

А вы отдаете себе отчет в том, что при извлечении случайной записи из таблицы MySQL средствами PHP ваш сервер проделает гораздо больше операций, нежели сервер MySQL при условии ORDER BY RAND() LIMIT 0,3;

Подумайте о том, что в случае с ORDER BY RAND() LIMIT 0,3 сервер MySQL будет выбирать случайные колонки таблицы всего 3 раза.

А теперь подумайте что в таблице может быть 1 000 000 записей, (или больше) и содержание этих записей вам не известно.

Совсем не обязательно предполагать что например ID пользователя идут в соответствующем порядке возрастания от 0 до 1 000 000. Пользователи могут быть удалены из БД, а значит какие-то ID пропущены и не существуют вообще и.т.д и.т.п.

Так как вы прочитаете например пользователя со случайным ID средствами PHP?

Вы предлагаете сначала прочитать всю таблицу (1 000 000 записей). Затем эти записи обработать:

Собственно а как вы будете их обрабатывать?

Или вы будете генерировать случайные ID пока чило не совпадет с уже имеющимся в таблице? Или вы сначала установите какие ID отсутствуют? Или... или... или...

В общем варриантов много, но все они сводятся к тому, что предвзятость програмистов к оптимальности работы скрипта, на самом деле загрузят ваш сервер PHP гораздо больше чем ORDER BY RAND() LIMIT 0,3

Так что подумайте прежде чем копать огород.

Link to comment
Share on other sites

  • 0

Так Выводим случайную фразу (строку) из файла:

<?

$file=" file.html"; # имя файла, где хранятся фразы

$array=file($file);

echo $array[rand(0,count($array)-1)];

?>

А как вывести из файла file.html значение 1.725

?

V

min

max

1

1048920

1.725

2.4725

2

1608312

1.96

4.9932

Заранее благадарю

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy