Ir para conteúdo

POWERED BY:

Arquivado

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

hyperpixel

[Resolvido] fazer query em duas tabelas

Recommended Posts

pessoal estou com problema na lógica de uma query seguinte:

tenho uma tab de usarios q tem amigos seria seguinte estrutura:


CREATE DATABASE IF NOT EXISTS `banco` 
USE `banco`;


DROP TABLE IF EXISTS `tb_usuario`;
CREATE TABLE IF NOT EXISTS `tb_usuario` (
 `idUsuario` int(10) NOT NULL AUTO_INCREMENT,
 `nomeUsuario` varchar(45) NOT NULL,
 `caminhoFoto` varchar(500) NOT NULL,
 PRIMARY KEY (`idUsuario`)
) ENGINE=MyISAM AUTO_INCREMENT=1
DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

INSERT INTO `tb_usuario` (`idUsuario`, `nomeUsuario`, `caminhoFoto`) VALUES (1, 'amigo1', 'img/peoples/1.jpg'), (2, 'amigo2', 'img/peoples/2.jpg'), (3, 'amigo3', 'img/peoples/3.jpg'), (4, 'amigo4', 'img/peoples/4.jpg');



DROP TABLE IF EXISTS `tb_usarios_amigos`;
CREATE TABLE IF NOT EXISTS `tb_usarios_amigos` (
 `idtb_usarios_amigos` int(10) NOT NULL AUTO_INCREMENT,
 `idUsuario` int(10) DEFAULT NULL,
 `idUsuarioAmigo` int(10) DEFAULT NULL,
 `dataCadastro` datetime DEFAULT NULL,
 PRIMARY KEY (`idtb_usarios_amigos`),
 KEY `idUsuarioAmigo` (`idUsuarioAmigo`),
 KEY `idUsuario` (`idUsuario`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;


INSERT INTO `tb_usarios_amigos` (`idtb_usarios_amigos`, `idUsuario`, `idUsuarioAmigo`, `dataCadastro`) VALUES (1, 1, 2, '2011-03-29 02:07:16'), (2, 1, 3, '2011-03-29 02:07:24'), (3, 2, 2, '2011-03-29 02:07:24'), (4, 3, 4, '2011-03-29 02:13:07'), (5, 4, 1, '2011-03-29 22:35:57');

 

 

 

 

meu problema esta q quero fazer uma consulta e mostrar as fotos dos meus amigos mas mostra as minhas fotos:

 

 

tentei usar subquery mas deu erro falou q n pode trazer mas de um resultado quando colocava id 1,

 

select `tb_usuario`.`caminhoFoto`
from
`tb_usuario`
WHERE (SELECT 
  `idUsuarioAmigo` uId
FROM
 `tb_usarios_amigos`
WHERE 
`tb_usarios_amigos`.`idUsuario` = 1)

 

e com join n consigo trazer as fotos dos amigos em vez da minha mesma:

 

select 
`tb_usuario`.`caminhoFoto`,
`tb_usarios_amigos`.idUsuarioAmigo
from
`tb_usuario`
INNER JOIN
`tb_usarios_amigos`
ON `tb_usarios_amigos`.idUsuario = `tb_usuario`.idUsuario
WHERE 
`tb_usarios_amigos`.`idUsuario` = 1

 

problema esta nesse resultado :

img/peoples/1.jpg
img/peoples/1.jpg

 

preciso disso :

img/peoples/2.jpg
img/peoples/3.jpg

 

das fotos dos amigos do usuario com id 1

desde ja grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

hyperpxel, tente isso:

SELECT 
   tb_usuario.caminhoFoto, tb_usarios_amigos.idUsuarioAmigo
FROM
   tb_usuario
       INNER JOIN tb_usarios_amigos ON tb_usarios_amigos.idUsuario = tb_usuario.idUsuario
WHERE 
   tb_usarios.idUsuario = 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendi o q essa query tem de diferente do join que eu fiz ?!!

 

SELECT 
   tb_usuario.caminhoFoto, tb_usarios_amigos.idUsuarioAmigo
FROM
   tb_usuario
       INNER JOIN tb_usarios_amigos ON tb_usarios_amigos.idUsuario = tb_usuario.idUsuario
WHERE 
   tb_usuario.idUsuario = 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendi o q essa query tem de diferente do join que eu fiz ?!!

 

SELECT 
   tb_usuario.caminhoFoto, tb_usarios_amigos.idUsuarioAmigo
FROM
   tb_usuario
       INNER JOIN tb_usarios_amigos ON tb_usarios_amigos.idUsuario = tb_usuario.idUsuario
WHERE 
   tb_usuario.idUsuario = 1

huperpixel, a diferença seria na clausula WHERE você faz o filtro através da Tabela tb_usarios_amigos e o meu faz pela Tabela tb_usarios

Compartilhar este post


Link para o post
Compartilhar em outros sites

n adiantou vem só fotos do usuario com idUsuario = 1

 

img/peoples/1.jpg
img/peoples/1.jpg
img/peoples/1.jpg
img/peoples/1.jpg

 

alguma outra sugestão? :ermm:

Compartilhar este post


Link para o post
Compartilhar em outros sites

hyperpixel, peguei o seu script das Tabelas e então agora estou simulando no meu computador, não sei se você notou mas a tem uma Tabela sua com o nome dif. "tb_usarios_amigos". Também notei que o campo idUsuarioAmigo ref. ao idUsuario da Tabela tb_usuario. Então o q eu consigo recomendar é você fazer uma SUBQUERY para resolver isto. Exemplo:

SELECT
   tb_usuario.caminhoFoto
FROM
   tb_usuario
WHERE
   tb_usuario.idUsuario IN (
 SELECT
   idUsuarioAmigo
 FROM
   tb_usarios_amigos
 WHERE
   tb_usarios_amigos.idUsuario = 1
)

Neste eu faço uma SUBQUERY para pegar os IDs dos Amigos do Usuário e depois eu pego na Tabela de Usuários os amigos deste. Veja ai se isto lhe ajuda.

Qualquer coisa é só postar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

resolvel a tag in() eu estava usando where ae quando tinha mais d um id dava erro mas resolveu valeu

Por nada meu caro precisando estamos ai, só faz um favor coloque este como RESOLVIDO.

 

Abraços.

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.