Boa noite a todos,
Gostaria de uma ajuda para usar LIMIT dentro de um JOIN.
Exemplo: 2 tabelas relacionadas (empresas e imagens)
Cada imóvel possui n imagens, porém no SELECT com JOIN gostaria que retornassem apenas 5 imagens para cada empresa.
Tive pensando em resolver a questão com algo tipo
SELECT c.cat_id
as id, c.cat_nome_fantasia
as empresa, i.img_nome as imagem FROM catalogo
c
LEFT JOIN (SELECT * FROM imagens WHERE fk_catalogo_id=c.cat_id LIMIT 3) i ON c.cat_id=i.fk_catalogo_id
Porém a coluna cat_id na subquery (WHERE fk_catalogo_id=c.cat_id ) não é encontrada.
Sabem se existe alguma forma de mudar isso? Tipo tornar a coluna Global.
Então tentei
SELECT (@valor_id:=c.cat_id
) as id, c.cat_nome_fantasia
as empresa, i.img_nome as imagem FROM catalogo
c
LEFT JOIN (SELECT * FROM imagens WHERE fk_catalogo_id=@valor_id LIMIT 3) i ON c.cat_id=i.fk_catalogo_id
Porém o @valor_id também não é reconhecido dentro do JOIN, ficando com NULL.
Só para informação:
Fiz esse teste para ver se o @valor_id aparece com algum valor na subquery contida no JOIN:
SELECT (@valor_id:=c.cat_id
) as id, c.cat_nome_fantasia
as empresa, i.img_nome as imagem, valor_id FROM catalogo
c
LEFT JOIN (SELECT im.*, @valor_id AS valor_id FROM imagens im ) i ON c.cat_id=i.fk_catalogo_id
Note que não usei o LIMIT.
Resultado: apenas como exemplo
id || empresa || imagem || valor_id
1 || emp1 || img1 || NULL
Por fim tentei setar a variável.
SET @valor_id=1;
SELECT (@valor_id:=c.cat_id
) as id, c.cat_nome_fantasia
as empresa, i.img_nome as imagem FROM catalogo
c
LEFT JOIN (SELECT * FROM imagens WHERE fk_catalogo_id=@valor_id LIMIT 3) i ON c.cat_id=i.fk_catalogo_id
Nesse caso quase funcionou, buscou as imagens com LIMIT,
mas, ficou preso a setar manualmente o @valor_id, ou seja, só busca as imagens do id setado, o que não teria serventia, pois poderia inserir o id direto no SELECT contido no JOIN.
Alguém tem alguma ideia de como resolver?
Obrigado