powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбор уникальных случайных записей
12 сообщений из 12, страница 1 из 1
Выбор уникальных случайных записей
    #39300785
AziAd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблица следующая:
ptype | text
-------------
1 Text1
2 Text2
3 Text3
4 Text4
1 Text5
2 Text6
3 Text7
4 Text8
1 Text9
2 Text10
....

Нужно выбрать 4 случайные записи с уникальным ptype. К примеру
1 Text5
2 Text10
3 Text7
4 Text4

Запрос такого вида выдает 4 записи с повторяющимися ptype:
Код: sql
1.
SELECT DISTINCT ptype, text FROM table ORDER BY RAND() LIMIT 4



Как это можно реализовать?
...
Рейтинг: 0 / 0
Выбор уникальных случайных записей
    #39300794
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сгруппируй по ptype
...
Рейтинг: 0 / 0
Выбор уникальных случайных записей
    #39300825
AziAd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183сгруппируй по ptype

Код: sql
1.
SELECT DISTINCT ptype, text FROM table GROUP BY ptype ORDER BY RAND() LIMIT 4



Так выдает только первые 4 записи в случайном порядке:
1 Text1
2 Text2
3 Text3
4 Text4

2 Text2
1 Text1
4 Text4
3 Text3

и тд.
...
Рейтинг: 0 / 0
Выбор уникальных случайных записей
    #39300847
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала получите 4 случайных ptype, а потом только для них во внешнем запросе случайные text.
Альтернатива - пронумеруйте записи в группах по ptype в случайном порядке и отберите 4 случайных type с номером 1.
...
Рейтинг: 0 / 0
Выбор уникальных случайных записей
    #39300914
AziAd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaСначала получите 4 случайных ptype, а потом только для них во внешнем запросе случайные text.
Альтернатива - пронумеруйте записи в группах по ptype в случайном порядке и отберите 4 случайных type с номером 1.
А как я получу 4 случайных уникальных(!) ptype, если их всего в таблице 4 (от 1 до 4)? Если просто выбрать 4 случайных записи, то там могут быть одинаковые ptype.
...
Рейтинг: 0 / 0
Выбор уникальных случайных записей
    #39300942
ADx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADx
Гость
Получить 4 случайных уникальных ptype (distinct, group by - в чем проблема?), по каждому выбрать случайную запись с этим ptype.
...
Рейтинг: 0 / 0
Выбор уникальных случайных записей
    #39300978
AziAd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ADxПолучить 4 случайных уникальных ptype (distinct, group by - в чем проблема?), по каждому выбрать случайную запись с этим ptype.
Не совсем понял вас.. В посте № 3 я писал про запрос distinct, group by. Результат не тот, который мне нужен. Или вы имели ввиду другое? Можно на коде это показать?
...
Рейтинг: 0 / 0
Выбор уникальных случайных записей
    #39301356
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AziAdкак я получу 4 случайных уникальных(!) ptype, если их всего в таблице 4 (от 1 до 4)? Если просто выбрать 4 случайных записи, то там могут быть одинаковые ptype.Ну глупости-то не говори... коню понятно, что ПОСЛЕ группировки.

AziAdих всего в таблице 4 (от 1 до 4)Это аксиома - что их ровно 4, и требуется тоже ровно 4? тогда не патчи мозг и сделай 4 запроса (для каждого конкретного ptype), объединив их по UNION ALL.
...
Рейтинг: 0 / 0
Выбор уникальных случайных записей
    #39301360
AziAd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На ум приходит только выполнить 4 запроса для ptype = 1, 2, 3, 4 с условием order by rand() limit 1. Но для производительности это критично
Код: sql
1.
2.
3.
4.
SELECT DISTINCT ptype, text FROM table WHERE ptype=1 ORDER BY RAND() LIMIT 1
SELECT DISTINCT ptype, text FROM table WHERE ptype=2 ORDER BY RAND() LIMIT 1
SELECT DISTINCT ptype, text FROM table WHERE ptype=3 ORDER BY RAND() LIMIT 1
SELECT DISTINCT ptype, text FROM table WHERE ptype=4 ORDER BY RAND() LIMIT 1



Как выбрать в одном запросе?
...
Рейтинг: 0 / 0
Выбор уникальных случайных записей
    #39301367
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AziAdКак выбрать в одном запросе?Да блин же!

Akinaобъединив их по UNION ALL
...
Рейтинг: 0 / 0
Выбор уникальных случайных записей
    #39301392
AziAd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina ,
Код: sql
1.
2.
3.
4.
5.
6.
7.
(SELECT DISTINCT ptype, text FROM table WHERE ptype=1 ORDER BY RAND() LIMIT 1) 
UNION ALL
(SELECT DISTINCT ptype, text FROM table WHERE ptype=2 ORDER BY RAND() LIMIT 1) 
UNION ALL
(SELECT DISTINCT ptype, text FROM table WHERE ptype=3 ORDER BY RAND() LIMIT 1) 
UNION ALL
(SELECT DISTINCT ptype, text FROM table WHERE ptype=4 ORDER BY RAND() LIMIT 1)



Какой-то слишком перегруженный запрос получается. Подскажите с вариантом GROUP BY и DISTINCT, на примере пожалуйста?
...
Рейтинг: 0 / 0
Выбор уникальных случайных записей
    #39301409
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Убери DISTINCT-ы (все 4) из запроса.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбор уникальных случайных записей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]