@Network2020

Как установить лимит на LEFT JOIN?

Пытаюсь для каждого пользователя из таблицы users вывести не более 5 фотографий из таблицы users_images. В приведенном ниже коде ограничение не происходит и для каждой строки таблицы users возвращается все записи из users_images, где id совпадает.

Также rn всегда равно единице, т.е. она не увеличивается. Поэтому и не происходит лимит на количество. В чем может быть проблема. Спасибо заранее!

SELECT
    u.`id`,
    u.`name`,
    `ui`.`user_id`,
    `ui`.`name_image`,
     ui.rn

FROM users AS u
    
  LEFT JOIN (SELECT id, user_id, name_image
  @row_num := CASE WHEN @row_num_val = user_id THEN @row_num + 1
                   WHEN (@row_num_val := user_id) IS NOT NULL THEN 1
              END rn
  FROM users_images, (SELECT @row_num := null, @row_num_val := null) AS x
  ORDER BY user_id, id
  ) AS ui ON ui.user_id= u.id and ui.rn <= 5
  • Вопрос задан
  • 282 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Vitsliputsli
Если версия MySQL позволяет, смотрите аналитические функции.
Если нужно на 5.7, то можно применить следующую магию:
select 
        case when @userId<>user_id then @q:=1 else @q:=@q+1 end q,
        case when @q=1 then @userId:=user_id else @userId end user_id
    from (select * users_images order by user_id) t1, (select @userId:=0, @q:=1) t2
    where user_id<>@userId or (user_id=@userId and @q<=2)

Здесь мы получаем из таблицы users_images по 3 элемента в каждой группе по user_id. Лимит установлен в самом конце <=2 - означает 3. Выглядит кошмарно, но решая такие задачи переменными mysql часто получается так.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы