2016-01-30 5 views
1

Ok Предполагая, я следующая таблицаMySQL Randomize в случайные результаты

================= 
gr   name 
================= 
A   John 
A   Mary 
A1   Jack 
A1   Stephen 
A   Jess 
A2   Neil 
A2   Chris 

, что я хотел бы сделать, это случайный результат порядка с одним правилом, A1 следует придерживаться A1 (в случайном порядке) и А2 должен придерживаться A2 (в произвольном порядке).

================= 
gr   name 
================= 
A   Mary 
A2   Chriss 
A2   Neil 
A   Jess 
A   John 
A1   Stephen 
A1   Jack 

Название группы Free, если вы можете найти лучшее название группы, не стесняйтесь использовать ее.

Спасибо.

Редактировать: Для тех, кому интересно, что я хочу создать, это онлайн-викторина. Он будет задавать вопрос в произвольном порядке, чтобы минимизировать обман. С одним правилом вопрос с текстом абзаца должен придерживаться друг друга (в случайном порядке), поэтому ученикам не придется читать один и тот же абзац несколько раз.

«Вопросы, сгруппированные по параграфу», в случайном порядке среди других вопросов, не относящихся к параграфам.

Если у вас есть идея об этом, не стесняйтесь отвечать.

Я нашел эту ссылку: MySQL order by rand() grouped by day

Я думаю, мой случай похож на его. Просто он хочет выбрать один, и я хочу выбрать ВСЕ.

Другой запрос я попытался

SELECT * FROM `tbl` ORDER BY gr, rand() 

он способен рандомизации колонки имени и гр будет прилипать друг к другу. Я оставил один вопрос, как рандомизации порядок столбца гр в то же время сделать A1, A2, прилипают друг к другу

+0

Что вы пробовали? Как насчет того, чтобы продемонстрировать какой-то SQL-запрос? Обратите внимание, что 'group' не является законным именем столбца MySQL. – msanford

+0

это просто пример. Я пробовал этот http://stackoverflow.com/questions/3188921/mysql-order-by-rand-grouped-by-day, но это не то, что я ищу – Yokowasis

ответ

1

Вот еще один способ сделать это , Хитрость заключается в генерации случайных чисел 2 в начале для А1 и А2, а также использовать их в роде:

select a.* 
from tbl a 
join (select @a1:=rand(), @a2:=rand()) b 
order by case gr 
     when 'A1' then @a1 
     when 'A2' then @a2 
     else rand() end, rand(); 

fiddle

+0

Уход, только то, что мне нужно – Yokowasis

0

Я хотел бы сделать что-то вроде этого:

SELECT 
    T.* 
FROM 
    TBL T 
    INNER JOIN (
     SELECT 
      GR, 
      RAND() AS R 
     FROM 
      (SELECT DISTINCT GR FROM TBL) X 
    ) T2 
     ON T.GR = T2.GR 
ORDER BY 
    T2.R, 
    RAND()