Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбор уникальных случайных записей / 12 сообщений из 12, страница 1 из 1
31.08.2016, 08:40
    #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
31.08.2016, 09:00
    #39300794
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор уникальных случайных записей
сгруппируй по ptype
...
Рейтинг: 0 / 0
31.08.2016, 09:41
    #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
31.08.2016, 10:02
    #39300847
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор уникальных случайных записей
Сначала получите 4 случайных ptype, а потом только для них во внешнем запросе случайные text.
Альтернатива - пронумеруйте записи в группах по ptype в случайном порядке и отберите 4 случайных type с номером 1.
...
Рейтинг: 0 / 0
31.08.2016, 11:23
    #39300914
AziAd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор уникальных случайных записей
AkinaСначала получите 4 случайных ptype, а потом только для них во внешнем запросе случайные text.
Альтернатива - пронумеруйте записи в группах по ptype в случайном порядке и отберите 4 случайных type с номером 1.
А как я получу 4 случайных уникальных(!) ptype, если их всего в таблице 4 (от 1 до 4)? Если просто выбрать 4 случайных записи, то там могут быть одинаковые ptype.
...
Рейтинг: 0 / 0
31.08.2016, 11:42
    #39300942
ADx
ADx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор уникальных случайных записей
Получить 4 случайных уникальных ptype (distinct, group by - в чем проблема?), по каждому выбрать случайную запись с этим ptype.
...
Рейтинг: 0 / 0
31.08.2016, 12:18
    #39300978
AziAd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор уникальных случайных записей
ADxПолучить 4 случайных уникальных ptype (distinct, group by - в чем проблема?), по каждому выбрать случайную запись с этим ptype.
Не совсем понял вас.. В посте № 3 я писал про запрос distinct, group by. Результат не тот, который мне нужен. Или вы имели ввиду другое? Можно на коде это показать?
...
Рейтинг: 0 / 0
31.08.2016, 17:38
    #39301356
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор уникальных случайных записей
AziAdкак я получу 4 случайных уникальных(!) ptype, если их всего в таблице 4 (от 1 до 4)? Если просто выбрать 4 случайных записи, то там могут быть одинаковые ptype.Ну глупости-то не говори... коню понятно, что ПОСЛЕ группировки.

AziAdих всего в таблице 4 (от 1 до 4)Это аксиома - что их ровно 4, и требуется тоже ровно 4? тогда не патчи мозг и сделай 4 запроса (для каждого конкретного ptype), объединив их по UNION ALL.
...
Рейтинг: 0 / 0
31.08.2016, 17:39
    #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
31.08.2016, 17:46
    #39301367
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор уникальных случайных записей
AziAdКак выбрать в одном запросе?Да блин же!

Akinaобъединив их по UNION ALL
...
Рейтинг: 0 / 0
31.08.2016, 18:03
    #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
31.08.2016, 18:23
    #39301409
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор уникальных случайных записей
Убери DISTINCT-ы (все 4) из запроса.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбор уникальных случайных записей / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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