usdglander
@usdglander
Yipee-ki-yay

Как сделать хитрую выборку из БД?

Добрый день.
Интересует такой вопрос, допустим есть таблица:
id | type | name
1 | one | Первый элемент one
2 | one | Второй элемент one
3 | one | Третий элемент one
4 | two | Первый элемент two
5 | two | Второй элемент two
6 | two | Третий элемент two
7 | two | Четвертый элемент two
...
Хочется одним запросом выдергивать по одной СЛУЧАЙНОЙ строчке с каждого типа. У меня игры с GROUP BY и ORDER BY RAND() привели к тому что выдергиваются только первые строки для каждого типа, но типы выводятся в случайном порядке. Гугление ни к чему не привело. Задача ещё усложняется тем, что заранее не известно сколько всего типов существует.
Заранее спасибо всем ответившим.
  • Вопрос задан
  • 260 просмотров
Решения вопроса 1
27cm
@27cm
TODO: Написать статус
SELECT * FROM (
    SELECT * FROM elements ORDER BY RAND()
) e GROUP BY e.type;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ColorCast
@ColorCast
Человек атомоход
У меня была задача связанная с криптозащитой, пришлось писать свой рандом, потому что существующая функция имеет приличную кучность.
Суть алгоритма основывается на получение списка ID записей и еще оного столбца для хеша фиксированной длинны. Далее генериться случайный хеш и сравнивается по весовому совпадению с хешами контрольных записей. Остаются хеши с одинаковыми весами. Для них снова генерим произвольный хеш и сравниваем. Так до тех пор пока не останется одно значение. Далее получаем запись по ID.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект