CONSULTA SQL

MICHAELL 15/02/2012 12:36:27
#394811
Ola pessoal..

estou fazendo um site de veiculos.. e estou querendo fazer uma busca de VEICULOS aleatoriamente (para fazer um DESTAQUES DE VEICULOS)

até conseguir fazer, vejam a consulta (resumi para poder ser mais simples):

  SELECT Veiculos.marca, Veiculos.modelo, Veiculos.cor, IMAGENS.imagem
FROM ((Veiculos) LEFT JOIN IMAGENS ON Veiculos.codigo = IMAGEM.codigo_veiculo )
ORDER BY RAND()
LIMIT 10


POREM...
A imagem IMAGEM PRINCIPAL tambem vem aleatorio, mostrando imagem do interior do carro algumas vezes invez da imagem principal (Frete do veiculo)

Queria pegar apenas a primeira imagem da tabela IMAGENS (order by IMAGEM.CODIGO) de cada veiculo.

Se eu coloco assim: ORDER BY IMAGEM.CODIGO, RAND()
Ele pega a primeira imagem do banco de dados e nao do VEICULO selecionado


A consulta da imagem acredito que tem que ser em LEFT JOIN, pois alguns veiculos NAO tem imagem.

OU SEJA:
Preciso ordenar a consulta ALEATORIO, porem, pegar apenas a primeira imagem de cada veiculo (tipo um ORDER BY dentro do LEFT JOIN)

Alguem saberia fazer isso?
MICHAELL 15/02/2012 15:09:51
#394820
MICHAELL 15/02/2012 15:30:46
#394821
só consegui fazendo uma outra consulta separado apenas para imagem..
mas queria mesmo resumir em uma só consulta.

Pois se tiver uma lista... com 100 carros, terá 100 consultas
MARCELO.TREZE 16/02/2012 09:05:34
#394862
MAICON posta as duas querys que fez e funcionaram, acredito que o pessoal não está entendendo sua duvida.

LLAIA 16/02/2012 09:29:13
#394865
Resposta escolhida
Citação:

:
só consegui fazendo uma outra consulta separado apenas para imagem..
mas queria mesmo resumir em uma só consulta.

Pois se tiver uma lista... com 100 carros, terá 100 consultas



Tentou subconsulta?


SELECT Veiculos.marca, Veiculos.modelo, Veiculos.cor, IMAGENS.imagem,(select imagem from IMAGENS imgP Where ImgP.codigo_veiculo = Veiculos.codigo AND imgP.Principal = true) as ImgPrincipal
FROM ((Veiculos) LEFT JOIN IMAGENS ON Veiculos.codigo = IMAGEM.codigo_veiculo )
ORDER BY RAND()
LIMIT 10


Aqui estou assumindo que sua tabela de imagens tenha um campo flag que indica a imagem principal. Mude usando a lógica do seu modelo.
MICHAELL 16/02/2012 09:31:34
#394866
Citação:

:
:
só consegui fazendo uma outra consulta separado apenas para imagem..
mas queria mesmo resumir em uma só consulta.

Pois se tiver uma lista... com 100 carros, terá 100 consultas

Tentou subconsulta?


SELECT Veiculos.marca, Veiculos.modelo, Veiculos.cor, IMAGENS.imagem,(select imagem from IMAGENS imgP Where ImgP.codigo_veiculo = Veiculos.codigo AND imgP.Principal = true) as ImgPrincipal
FROM ((Veiculos) LEFT JOIN IMAGENS ON Veiculos.codigo = IMAGEM.codigo_veiculo )
ORDER BY RAND()
LIMIT 10


Aqui estou assumindo que sua tabela de imagens tenha um campo flag que indica a imagem principal. Mude usando a lógica do seu modelo.



Subconsulta nao vai fazer uma consulta para cada veiculo encontrado?
Se tiver uma lista com 100 carros, vai fazer 101 consultas, nao vai?
LLAIA 16/02/2012 09:36:01
#394868
Creio que não tenha jeito cara, pois mesmo que vc faça outra junção com a tabela IMAGENS e filtrar a principal por essa nova junção na cláusula WHERE, vc elimina todas as outras imagens e fica só com a principal. é uma limitação do modelo relacional.

A vantagem da subconsulta é que o processo é interno ao banco, não é necessário vc criar um recordset e abrir outro cursor pra isso.

Bom, vamos aguardar algum colega com uma ideia melhor. :)
MICHAELL 16/02/2012 09:38:49
#394869
Citação:

:
Creio que não tenha jeito cara, pois mesmo que vc faça outra junção com a tabela IMAGENS e filtrar a principal por essa nova junção na cláusula WHERE, vc elimina todas as outras imagens e fica só com a principal. é uma limitação do modelo relacional.

A vantagem da subconsulta é que o processo é interno ao banco, não é necessário vc criar um recordset e abrir outro cursor pra isso.

Bom, vamos aguardar algum colega com uma ideia melhor. :)



LLAIA
eu quero eliminar todas as outras imagens e deixar na consulta APENAS a principal. Pois na consulta é para mostrar apenas a foto principal do veiculo.

como fazer essa NOVA JUNCAO que voce mencionou?
LLAIA 16/02/2012 09:45:37
#394870
Então nem precisa da outra junção.

SELECT Veiculos.marca, Veiculos.modelo, Veiculos.cor, IMAGENS.imagem
FROM ((Veiculos) LEFT JOIN IMAGENS ON Veiculos.codigo = IMAGEM.codigo_veiculo) WHERE IMAGENS.Principal = True
ORDER BY RAND()
LIMIT 10


Como disse antes, aqui estou assumindo que sua tabela de imagens tenha um campo flag que indica a imagem principal. Mude usando a lógica do seu modelo.
MICHAELL 16/02/2012 09:48:08
#394871
certo.. entendi

teria que ter uma coluna na tabela IMAGENS chamada de principal para identificar qual é a imagem principal.

eu queria que fosse automaticamente a primeira imagem enviada... mas acredito que assim resolve o problema.
pois assim possibilita o cliente de escolher a principal sem precisar enviar as imagens em ordem.

LLAIA 16/02/2012 09:57:15
#394873
Citação:

:
certo.. entendi

teria que ter uma coluna na tabela IMAGENS chamada de principal para identificar qual é a imagem principal.

eu queria que fosse automaticamente a primeira imagem enviada... mas acredito que assim resolve o problema.
pois assim possibilita o cliente de escolher a principal sem precisar enviar as imagens em ordem.



Hehehe .. que legal! Sem querer conseguimos uma função útil pro sistema.
Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas