Простое решение, которое принимает 7 запросов:
SELECT distinct bar FROM sometable ORDER BY rand() LIMIT 6
Затем для каждого из 6 значений бара, указанных выше, подставьте {$ bar} вместо значения, конечно:
SELECT foo,bar FROM sometable WHERE bar='{$bar}' ORDER BY rand() LIMIT 5
Будьте осторожны с использованием "ORDER BY rand ()", потому что это может привести к тому, что MySQL извлечет МНОЖЕСТВО строк из вашей таблицы и вычислит функцию rand () для всех из них, а затем отсортирует их. Это может занять много времени, если у вас большой стол.
Если это занимает много времени, то для первого запроса вы можете удалить предложения ORDER BY и LIMIT и выбрать 6 случайных значений в программном коде после выполнения запроса.
Для второго запроса вы можете разбить его на два этапа:
SELECT count(*) FROM sometable WHERE bar='{$bar}'
Затем в своем программном коде вы знаете, сколько элементов существует, чтобы вы могли случайным образом выбрать, на какой из них смотреть, и использовать OFFSET и LIMIT:
SELECT foo,bar FROM sometable WHERE bar='{$bar}' LIMIT 1 OFFSET {$offset}