Задать вопрос
@adamdickins2

Как сделать в запрос Mysql что бы вывести по 10 записей каждой страны?

Здравствуйте. Есть таблица с сайтами. В таблице есть поле language - язык сайта. EN, ES, RU

Нужно при каждом запросе выводить по 10 результатов для каждого языка. Причем результаты должны быть рандомные RAND()
EN - 10 рандомных результатов
ES - 10 рандомных результатов
RU - 10 рандомных результатов

Пока я вижу только сделать это через UNION

SELECT id FROM table WHERE language = "EN" ORDER BY RAND() LIMIT 10 UNION
SELECT id FROM table WHERE language = "ES" ORDER BY RAND() LIMIT 10 UNION
...

На данный момент есть около 10 языков и получается нужно сделать 10 UNION. можно ли сделать проще ?
  • Вопрос задан
  • 79 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
Вы можете использовать оконную функцию row_number

create table tbl(id int primary key auto_increment, lang varchar(2));

insert into tbl(lang) values 
('EN'),('ES'),('RU'), ('EN'),('ES'),('RU'), ('EN'),('ES'),('RU'), ('EN'),('ES'),('RU'), ('EN'),('ES'),('RU'),
 ('EN'),('ES'),('RU'), ('EN'),('ES'),('RU'), ('EN'),('ES'),('RU'), ('EN'),('ES'),('RU'), ('EN'),('ES'),('RU');
 
 
with data as (
  select 
	id, lang, 
	row_number() over (partition by lang order by rand()) rn
  from tbl
) 
select id, lang from data
where rn < 11;


MySQL window function
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
И наш традиционный вопрос: что я делаю не так, печатая заголовок вопроса не в форму на тостере, а в адресную строку своего браузера?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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