Jump to content


Photo

Consulta Em 4 Tabelas Em Uma única Query


  • Faça o login para participar
1 reply to this topic

#1 DiversaoRJ

DiversaoRJ

    Novato no fórum

  • Usuários
  • 2 posts
  • Sexo:Não informado

Posted 13/02/2007, 21:03

Olá, esta ocorrendo um erro no meu SQL. Preciso colocar em uma única query uma consulta de 4 tabelas.

Minhas Tabelas para esta consulta e seus campos:

Tabela: anuncio - Campos: codigo, subcodigo, sequencia, url, visualizacao, categoria1, categoria2, status, plano, extra
Tabela: cidade - Campos: codigo, nomecidade
Tabela: estado - Campos: codigo, sigla
Tabela: empresa - Campos: codigo, subcodigo, sequencia, codigocidade, codigoestado

Bom, a consulta deve mostrar os campos:
- url da tabela anuncio
- nomecidade da tabela cidade
- sigla da tabela estado

Existe outros campos envolvidos, mas preferi simplificar para facilitar a leitura.

Sendo que:
- o codigo, subcodigo e sequencia da tabela anuncio deve ser igual da tabela empresa
- o codigo da tabela cidade deve ser igual da tabela empresa campo codigocidade
- o codigo da tabela estado deve ser igual da tabela empresa campo codigoestado

O where deve mostrar:
- somente o parametro igual aos dados dos campos categoria1 ou categoria2 da tabela anuncio
- e status igual a 1
- e visualizacao menor que (plano + extra)
- e informar qual o registro atual e limitar o numero do registro na pagina.

Abaixo o meu SQL no Banco de Dados MySql:

select
anuncio.codigo, anuncio.subcodigo, anuncio.sequencia, anuncio.url, anuncio.visualizacao,
cidade.nomecidade,
estado.sigla

from anuncio

inner join ((cidade inner join empresa on cidade.codigo = empresa.codigocidade)

inner join estado on empresa.codigoestado = estado.codigo) on ((anuncio.codigo = empresa.codigo) and
(anuncio.subcodigo = empresa.subcodigo) and
(anuncio.sequencia = empresa.sequencia))

where
(anuncio.categoria1 = '$categoria' or anuncio.categoria2 = '$categoria') and
anuncio.status = '1' and
anuncio.visualizacao < (anuncio.plano + anuncio.extra)
limit $registro, $limite


Obrigado desde já pela ajuda.

#2 MarkApollo

MarkApollo

    Turista

  • Usuários
  • 44 posts
  • Sexo:Não informado
  • Localidade:Viana

Posted 14/02/2007, 14:13

Experimente fazer assim:

select
  anuncio.codigo, 
  anuncio.subcodigo, 
  anuncio.sequencia, 
  anuncio.url, 
  anuncio.visualizacao,
  cidade.nomecidade,
  estado.sigla
from 
  anuncio
inner join empresa on 
  (empresa.codigo = anuncio.codigoempresa)
inner join cidade on 
  (cidade.codigo = empresa.codigocidade)
inner join estado on 
  (estado.codigo = empresa.codigoestado)
where
  (anuncio.categoria1 = '$categoria' or anuncio.categoria2 = '$categoria') 
  and anuncio.status = '1' 
  and anuncio.visualizacao < (anuncio.plano + anuncio.extra)
limit $registro, $limite

o inner join é com esta sintaxe:

inner join "tabela b" on ("tabela b".codigo = "tabela a".codigo_referencia)

ok??




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq