рандомная выборка из бд заданного числа...

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
QweЯty
лейтенант
Сообщения: 796
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

рандомная выборка из бд заданного числа...

Непрочитанное сообщение QweЯty » 2011-05-07 11:59:39

доброго времени суток.

в таблице test4 бд russian есть полt id со значениями: n..n+50 (незнаем к примеру)

сначала нужно выбрать сколько значений нужно выбрать: 10-20-30.
и из всей этой таблицы, общим числом в x, нужно рандомно выбрать это количество полей:(10-20-30).

это тесты по русскому языку для иностранцев... приступили к тесту, выбрали сложность: 10-20-30 предложений.
и из всей бд выбираются любые предложения количеством 10-20-30...

работает все, кроме рандомной выборки предложений. выбираются только из первой 10-20-30-ки предложений, но отображаются в рандомном порядке, а остальные никогда не задействованы...

как сделать рандомную выборку значений?

могу прикрепить все файлы: php и sql.

p.s. писал все это на 2м курсе, 2,5 года назад... поэтому криво :)

Код: Выделить всё

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>TEST PAGE!!!</title>

<style type="text/css">
<!--
label {
        position: relative;
        left: 12px;
        }

body {
        padding: 12px 56px;
        width: 650px;
        margin: 0 auto;
        background: #878787 url(background-drop-shadow.gif) 50% 0 repeat-y;
        color: #000066;
        }
        .border_question{
        border-width: thin;
        border-style: solid;
        border-color: #006633;
        font-weight: bolder;
}
hr {
 height: 15;
  width: 100%;
 text-align: center;
 color: #FF0000;
}
.text{
        border-style: none;
        62.5%/1.5 Verdana, Arial, Helvetica, sans-serif;
        font-style: regular;
        font-size:1.1em;
        text-align:justify;
}
.button_test {
        width:248px;
        height:30px;
        text-align:center;
        color: #FFFFFF;
        background-color: #0066CC;
        font-size: large;
        cursor:pointer;
}

.answer{
        color:#000099;
        font-weight: normal;
}
-->
</style>
</head>
<body>

<h1 align="center" class="style1">Выберите правильный вариант, синонимичный выделенному слову:</h1>
<?php
 $db            =        mysql_connect("127.0.0.1","trunghiep","12345");
 mysql_query('SET NAMES utf8 ') or header('Location: Error');
                                 mysql_select_db("RUSSIAN",$db);

 $qua           =       $_POST['quantity'];
 $level         =       '3';
 $result        =       mysql_query("SELECT * FROM test4 where level=$level LIMIT $qua",$db);
 $i=0;
 $j=0;

 $num_rows  =  mysql_num_rows($result);
// $num_rows2  =  mysql_num_rows($result2);
while (($j < $qua) and ($j<$num_rows))
{
        $myrow[$j]      =   mysql_fetch_array($result);
        $j++;
}
$t=0;
$indexArray = Array();
while($t<$qua)
{
        $randNum = round(rand(0,($qua-1)));
        $exist = false;
        $s=0;
        for ($s=0; $s<sizeof($indexArray);$s++)
        {
                if (round($indexArray[$s]) == round($randNum))
                {
                        $exist = true;
                        break;
                }
        }
        if ($exist == false)
        {
                $indexArray[$t] = $randNum;
                $t++;
        }
}
$t = 0;
$textArray = Array();
while ($t<$qua)
{
        $textArray[$t] = $myrow[$indexArray[$t]];
        $t++;
}
$myrow = $textArray;
$part = 1;
$ex = 1;
$testNum = 1;
printf("<form id='form1' name='form1' method='post' action='result3.php'>");
while ( ($i < $qua) and ($i<$num_rows) )
{
        $i                      =   $i + 1;
        printf("<p >");
        printf(" <p class='border_question'>%s. %s </p>", $i,$myrow[$i-1]['question']  );
        if ( $myrow[$i-1]['var1'] !='' )
        {
        printf(" <div class='answer'><label> <input type='radio' name='ans_$i' value='1' checked='checked' /> %s <br/></label>",$myrow[$i-1]['var1']);
    }

        if ( $myrow[$i-1]['var2'] !='' )
        {
        printf("<label> <input type='radio' name='ans_$i' value='2' /> %s <br/></label>",$myrow[$i-1]['var2']);
    }

        if ( $myrow[$i-1]['var3'] !='' )
        {
        printf("<label> <input type='radio' name='ans_$i' value='3' /> %s <br/></label>",$myrow[$i-1]['var3']);
    }

        if ( $myrow[$i-1]['var4'] !='' )
        {
        printf("<label> <input type='radio' name='ans_$i' value='4' /> %s <br/></label>",$myrow[$i-1]['var4']);
    }

        if ( $myrow[$i-1]['var5'] !='' )
        {
        printf("<label> <input type='radio' name='ans_$i' value='5' /> %s <br/></label>",$myrow[$i-1]['var5']);
    }

        printf("<input type='hidden' name='right_ans_$i' value='%s'/></div>",$myrow[$i-1]['answer']);
        printf("</p>");
 }
printf("<input type='hidden' name='quality_question' value='%s'/>",$i);
printf("<br /><div>
    <input name='Submit' type='submit' class='button_test' value='Результат теста' />
                </div> ");
echo("<br />");
 $i = 0;

 echo("<br />");

printf("<div>
        <input name='Submit' type='submit' class='button_test' value='Результат теста с ответами' />
                </div> ");
echo("<br />");
 printf("</form>");
?>
</body>
</html>
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/


Аватара пользователя
QweЯty
лейтенант
Сообщения: 796
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: рандомная выборка из бд заданного числа...

Непрочитанное сообщение QweЯty » 2011-05-07 12:18:30

Код: Выделить всё

$result = mysql_query("SELECT * FROM test4 where level=$level LIMIT $qua",$db);
то есть так будит теперь:

Код: Выделить всё

SELECT * FROM test4 where level=$level ORDER BY RAND() LIMIT $qua",$db
p.s. угу, проверил. работает. спасибо.
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: рандомная выборка из бд заданного числа...

Непрочитанное сообщение Alex Keda » 2011-05-07 22:07:38

rmn писал(а):

Код: Выделить всё

SELECT * FROM table ORDER BY RAND() LIMIT 30
страшные запросы...
на большой таблице (от сотни метров и выше) хостер вас погонит вшею с такими.

по крайней мере я гоню =)
Убей их всех! Бог потом рассортирует...

Аватара пользователя
QweЯty
лейтенант
Сообщения: 796
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: рандомная выборка из бд заданного числа...

Непрочитанное сообщение QweЯty » 2011-05-08 4:06:35

не, таблица всего 12 килобайт:)
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

FiL
ст. лейтенант
Сообщения: 1375
Зарегистрирован: 2010-02-05 0:21:40

Re: рандомная выборка из бд заданного числа...

Непрочитанное сообщение FiL » 2011-05-08 7:47:21

Alex Keda писал(а):
rmn писал(а):

Код: Выделить всё

SELECT * FROM table ORDER BY RAND() LIMIT 30
страшные запросы...
на большой таблице (от сотни метров и выше) хостер вас погонит вшею с такими.

по крайней мере я гоню =)
вопрос не в метрах, а в количестве строк. Если их там сотни тысяч, то будет хренеово, да.

Аватара пользователя
QweЯty
лейтенант
Сообщения: 796
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: рандомная выборка из бд заданного числа...

Непрочитанное сообщение QweЯty » 2011-05-08 10:29:12

46 строк :)
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: рандомная выборка из бд заданного числа...

Непрочитанное сообщение Alex Keda » 2011-05-08 13:50:23

и в метрах тоже.
если в память не вписывается - будет пилить диск - каждая выборка - запись таблицы во временный файл...
Убей их всех! Бог потом рассортирует...

FiL
ст. лейтенант
Сообщения: 1375
Зарегистрирован: 2010-02-05 0:21:40

Re: рандомная выборка из бд заданного числа...

Непрочитанное сообщение FiL » 2011-05-09 4:33:57

да? не знал. Буду иметь в виду. Хотя с другой стороны, еще ни разу не приходилось применять такую конструкцию.