Ir para conteúdo
Fórum Script Brasil
  • 0

Didyo

Pergunta

Olá pessoal, gostaria de saber se é possível e como limitar a quantidade de linha retornadas usando JOIN.
A ideia é limitar a quantidade de linhas retornadas da tabela filho em relação a cada linha da tabela pai.

Ex. Tenho 10 registros de imóveis na tabela_imv e cada um destes possui mais de 12 imagens na tabela_imgs (cada imagem em uma linha diferente).

Usando o LEFT JOIN gostaria que para cada imóvel fossem trazidas apenas 5 imagens usando LIMIT 5 de modo que a cada 5 imagens encontradas, a busca cessasse na tabela filho, e retomasse procurando as 5 primeiras imagens do próximo imóvel.

Desde já agradeço a atenção.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Olá pessoal, 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_idnão é reconhecida

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 parece não ter ficado setado, pois não retornou registros.

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

Editado por Didyo
Link para o comentário
Compartilhar em outros sites

  • 0

Bem pessoal consegui uma solução simples, que não é exatamente o que procurava,
mas dá para quebrar um galho.
Vou continuar tentando encontrar a solução para a forma original que queria, usando (LIMIT) dentro do JOIN.

Objetivo:
Uso de 2 tabelas relacionadas 1:n onde temos vários imóveis na primeira tabela e cada imóvel possui várias imagens em outra tabela. 
Objetivo: Retornar apenas 5 imagens para cada imóvel em um SELECT com JOIN.

Solução provisória:
Ter na tabela imagens, além dos campos como (id, fk_id_imovel, nome_img, diretorio),
um campo ordem_imgs que deverá ser populado com números sequências iniciando no 1.

Assim no SELECT ficaria algo do tipo:

SELECT i.*, img.* FROM imoveis i 

LEFT JOIN imagens img ON img.fk_id_imovel=i.id AND img.ordem_imgs <=5 

Só para base de conhecimento:
Pode-se usar uma biblioteca JQuery  como (sortable) junto com o PHP e MySql para se ordenar as imagens arrastando-as (DRAG and Drop) no lado do cliente de modo a atualizar a sequência de números que determina a ordem das imagens na tabela do banco de dados.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...