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.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы