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

Sintaxe de LEFT JOIN com COUNT


lcerbaro

Pergunta

Bom dia.

Estou com dificuldades para realizar uma consulta, pois não domino ainda as ordens de sintaxe SQL.

Um anuncio tem um status e várias imagens. Quero contar quantas imagens tem o anuncio.

Primeiro tentei assim:

select 
    anuncios.*, statusanuncio.nome as status 
from 
    anuncios, imagens, statusanuncio 
left join 
    count(imagens.idanun) as n on imagens.idanun=anuncios.id 
where 
    statusanuncio.id=anuncios.idstatusanuncio and anuncios.idcli='1' 
group by 
    imagens.idanun"
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'count(imagens.idanun) as n on imagens.idanun=anuncios.id where statusa' at line 6
Aí me orientaram a fazer assim:
select 
       anuncios.*,
       statusanuncio.nome as status,
       count(imagens.idanun) as n
from 
      anuncios, imagens, statusanuncio 
left join 
      imagens on imagens.idanun=anuncios.id 
where 
      statusanuncio.id=anuncios.idstatusanuncio and anuncios.idcli='1'
Unknown column 'anuncios.id' in 'on clause'
E então:
select 
      anuncios.*, statusanuncio.nome as status, count(n.idanun) as contador
from 
      anuncios, statusanuncio 
left join 
       images as n on n.idanun=anuncios.id 
where 
      statusanuncio.id=anuncios.idstatusanuncio and anuncios.idcli='1' 
group by 
      imagens.idanun

Unknown column 'anuncios.id' in 'on clause'

Eu não entendo ainda muito bem de SQL e porque o Left Join não encontra o anuncios.id no 3o caso.

Se alguém puder explicar esse tipo de "escopo" entre os comandos eu agradeço.

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

select 
       a.*,
       s.nome as status,
       count(i.idanun) as n
from 
      anuncios a
left join 
      imagens i on i.idanun = a.id
left join
          statusanuncio s on s.id = a.idstatusanuncio

where 
       a.idcli = '1'
procure usar alias também... pra não ter q escrever o nome da tabela toda vez q for fazer uma consulta... imagina q você tem uma tabelacomnomegigantesco e ter d escrever toda hora -> tabelacomnomegigantesco.codigo, tabelacomnomegigantesco.nome _________________________________________________________________________________________________________
select 
       anuncios.*,
       statusanuncio.nome as status,
       count(imagens.idanun) as n
from 
      anuncios, imagens, statusanuncio 
left join 
      imagens on imagens.idanun=anuncios.id 
where 
      statusanuncio.id=anuncios.idstatusanuncio and anuncios.idcli='1'
aqui você já tinha adicionado o 'imagens' mas depois fez nova referencia a essa tabela no left join _________________________________________________________________________________________________________
select 
      anuncios.*, statusanuncio.nome as status, count(n.idanun) as contador
from 
      anuncios, statusanuncio 
left join 
       images as n on n.idanun=anuncios.id 
where 
      statusanuncio.id=anuncios.idstatusanuncio and anuncios.idcli='1' 
group by 
      imagens.idanun

neste caso você tem d colocar o left jion depois da tabela q quer linkar, como quer linkar a tabela anuncios a tabela imagens, você aki separou a tabela anuncios com a virgula e linkou a tabela statusanuncio no lef join... por isso não encontrava o anuncios.id

Editado por Felipe Vacão
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
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...