Jump to content
Fórum Script Brasil
  • 0

Sintaxe de LEFT JOIN com COUNT


lcerbaro

Question

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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

Edited by Felipe Vacão
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...