• Главная
  • » SQL
  • » выбрать 10 случайных, уникальных записей

#11 2015.08.25 12:24

koji
Участник
Зарегистрирован: 2014.07.13
Сообщений: 72
Карма: 3
Профиль

Re: выбрать 10 случайных, уникальных записей

tipsun, а если окажется что в БД выбранное 51 это последняя запись? Хотя это неплохой вариант. Мне кажется в ссылках есть пример (из комментариев) вроде подходит, надо бы попробовать его. Но хочу доделать свой через мульти + php чтобы сравнить скорость.

Неактивен

#12 2015.08.25 12:41

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2291
Карма: 19
Профиль

Re: выбрать 10 случайных, уникальных записей

tipsun написал:

koji, а нельзя сделать типа: сгенерировать 1 случайное число и ограничить кол-во записей LIMIT 10.
А чтоб не получилось так, что не хватает записи при 100 записях в базе и сгенерило случ. число 95, сделать -10 у получаемого рандомного числа.
Записи будут только идти подряд, но будут уникальными и своего рода тоже рандомными smile

Неактивен

#13 2015.08.25 16:44

koji
Участник
Зарегистрирован: 2014.07.13
Сообщений: 72
Карма: 3
Профиль

Re: выбрать 10 случайных, уникальных записей

tipsun, благодарю
Добавлено спустя   5 минут  31 секунду:
При 10646 записях в БД

ORDER BY RAND()
0.014

первый уникальный с последующими за ним числами  (51, 52, 53, 54 и т.д.)
0.003

т.е.

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$query = "
SELECT
id,
data
FROM
files AS r1
JOIN
(SELECT (RAND() * (SELECT MAX(id) FROM files)) AS ids) AS r2
WHERE
r1.id >= r2.ids
ORDER BY
r1.id ASC
LIMIT
10;
";

Неактивен

#14 2015.08.25 17:42

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2291
Карма: 19
Профиль

Re: выбрать 10 случайных, уникальных записей

koji, рандомно взятый кусок списка получается как бы. А мой код лучше не юзай, я там ошибся в нескольких местах, ну нафиг smile

Неактивен

#15 2015.08.25 22:54

koji
Участник
Зарегистрирован: 2014.07.13
Сообщений: 72
Карма: 3
Профиль

Re: выбрать 10 случайных, уникальных записей

tipsun, видимо на скорую руку набросал wink я тоже сомневался
доработал свой кусок, он отлично выбрасывает более 10 уникальных random,
выбираю по ключам в масиве $unique от 0 до 9 а остальное остается (2-5 элементов)

Код:

1
2
3
4
5
for ($i = 1; $i <= 20; $i++)
{
$rand[] = rand(1, 10646);
}
$unique = array_values(array_unique($rand));

вариант из двух: тот, что посоветовал ты и через multi_query. Последний срабатывает за 0.005. Там сгенерировать 10 запросов с выборкой WHERE id = $unique[$i] Надо бы запустить на базе побольше, тогда точно станет ясно.

Отредактировано koji (2015.08.25 23:03)

Неактивен

#16 2015.08.25 23:46

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2291
Карма: 19
Профиль

Re: выбрать 10 случайных, уникальных записей

Gemorroj, что "скажешь"? Мне кажется есть ещё более крутой и оптимизированный способ.
Чисто из "спортивного" интереса сейчас ещё посидел, подумал.
Вот вроде норм вышло, но чем меньше множество, тем больше повторов и больше циклов.
+ фильтры на данные нужны, чтоб записей было более 0 и все такое крч.

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
 
$rand_zapisej 10;
$id_min 1;     // id в базе обычно начинается с 1
$id_max 10646// получаем через базу
 
var_dump($rand_zapisejrandNumbs($rand_zapisej$id_min$id_max));
 
function randNumbs($qty$min$max) {
    $rst = array();
 
    while ($qty) {
        $num rand($min$max);
        if (! $rst[$num]) {
            $qty--;
            $rst[$num] = $num// или: $rst[$num] = null;
            // если null, потом foreach ($array as $key => $valueIsNull) { echo $key; }
            // или array_keys(randNumbs(/* args */));
        }
    }
 
    return $rst;
}

Неактивен

#17 2015.08.26 00:00

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2291
Карма: 19
Профиль

Re: выбрать 10 случайных, уникальных записей

Если кол-во записей совпадает с кол-во выводимых постов, то можно вообще сделать через: shuffle(range(1, 10));
Кстати подряд идущие записи ты прежде чем вывести можешь раскидать в массиве этой функцией: shuffle($array);

Неактивен

#18 2015.08.26 09:25

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6586
Карма: 108
Профиль Веб-сайт

Re: выбрать 10 случайных, уникальных записей

tipsun ну у тебя подразумевается что дырок в очередности id в бд нету. а в реальности, записи могут отсутствовать.

Неактивен

#19 2015.08.26 11:51

koji
Участник
Зарегистрирован: 2014.07.13
Сообщений: 72
Карма: 3
Профиль

Re: выбрать 10 случайных, уникальных записей

Gemorroj, точно, да, об этом никто не думал. ID ведь могут отсутствовать.

Неактивен

  • Главная
  • » SQL
  • » выбрать 10 случайных, уникальных записей

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.1
0.011 s