Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Beraldo

[Resolvido] sub-query com condição

Recommended Posts

Tenho duas tabelas:

 

produtos

-- id

bla bla bla

 

produtos_fotos

-- id

-- id_produto

-- foto

 

A tabela produtos_fotos tem mais de um registro para cada produto, pois há mais de uma foto para cada um deles.

 

 

Quero montar uma página com os últimos produtos cadastrados. Para isso, quero, além dos dados do produto, uma única foto dele, apenas para uma ilustração. Creio que eu deveria fazer uma sbuquery, mas eu teria de colocar um WHERE nela. Não sei como fazer.

 

tentei assim:

SELECT q.id, q.nome, q.modalidade, q.cidade, q.uf,
(SELECT thumb FROM quadras_fotos LIMIT 1) as thumb,
(SELECT id_quadra FROM quadras_fotos LIMIT 1) as id_quadra
FROM quadras AS q
LIMIT 3

O problema é que o thumb e o id_quadra não correspondem ao ID da quadra.

 

Como posso fazer isso sem usar duas consultas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta isso:

 

SELECT q.id
, q.nome
, q.modalidade
, q.cidade
, q.uf
,
(SELECT thumb FROM quadras_fotos where q.id = id LIMIT 1) as thumb,

(SELECT id_quadra FROM quadras_fotos where q.id = id_quadra LIMIT 1) as id_quadra

FROM quadras AS q
LIMIT 3

 

Não entendi bem a estrutura que montou, mas iguala os id das tabelas do subselect com os da tabela externa (fora do subselect)

 

Ve se eh isso

 

Agora que eu li que os ids nao sao os mesmos. Poderia postar a estrutura das tabelas?!

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

não deu. :(

 

É o seguinte:

Recapitulando

 

quadras:

-- id

bla bla bla

 

quadras_fotos

- id

- id_quadra

- foto

 

Supondo que tenho isto cadastrado:

 

quadras

id
1 
2
3

quadras_fotos

id id_quadra   foto
1	  1			 foto1_q1
2	  1			 foto2_q1
3	  2					 foto1_q2
4	  2			 foto2_q2

Quero este resultado:

id_quadra ... foto
	1			  foto1_q1
   2			   foto1_q2

Compartilhar este post


Link para o post
Compartilhar em outros sites

create table #quadras (id int)
create table #quadras_fotos (id int, id_quadra int, foto varchar(20))


insert into #quadras values (1)
insert into #quadras values (2)
insert into #quadras values (3)


insert into #quadras_fotos values (1,1,'foto1_q1')
insert into #quadras_fotos values (2,1,'foto2_q1')
insert into #quadras_fotos values (3,2,'foto1_q2')
insert into #quadras_fotos values (4,2,'foto2_q2')



select 
q.id_quadra
, (select top 1 foto from #quadras_fotos where id_quadra = q.id_quadra )
from #quadras_fotos q
group by id_quadra

drop table #quadras
drop table #quadras_fotos

roda isso ou isso:

 

create table #quadras (id int)
create table #quadras_fotos (id int, id_quadra int, foto varchar(20))


insert into #quadras values (1)
insert into #quadras values (2)
insert into #quadras values (3)


insert into #quadras_fotos values (1,1,'foto1_q1')
insert into #quadras_fotos values (2,1,'foto2_q1')
insert into #quadras_fotos values (3,2,'foto1_q2')
insert into #quadras_fotos values (4,2,'foto2_q2')


select 
q.id
, (select top 1 foto from #quadras_fotos where id_quadra = q.id)
from #quadras q
group by id 

drop table #quadras
drop table #quadras_fotos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quase... esse TOP gerou erro . Usei LIMIT mesmo

 

Consegui assim:

SELECT q.id, q.nome,
(
SELECT thumb
FROM quadras_fotos
WHERE id_quadra = q.id
LIMIT 1
) as thumb,
(SELECT id_quadra
FROM quadras_fotos
WHERE id_quadra = q.id
LIMIT 1
) as id_quadra
FROM quadras q
GROUP BY id

Valeu!

 

Pago uma gelada para você lá no boteco! :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esqueci que era mysql ^^

Em Mysql eh limit e em SQLServer em Top

 

Me deve uma nao. duas. nao vem nao ^^

 

Boa sorte ai

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.