CONSULTA SQL
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?
mas queria mesmo resumir em uma só consulta.
Pois se tiver uma lista... com 100 carros, terá 100 consultas
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.
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?
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. :)
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?
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.
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.
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.