Ir para conteúdo

POWERED BY:

Arquivado

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

Mahhbatera

Problema com SELECT na relação de amizade

Recommended Posts

Iae pessoal, é o seguinte:

 

tenho as seguintes tabelas:

 

Usuario( id_usuario )

 

usuario_amigo(id_amizade, id_usuario, id_usuario_amigo, aceito)

 

na tabela usuario amigo, o id_usuario é a PESSOA QUE ADICIONOU a outra

e o campo id_usuario_amigo é a PESSOA ADICIONADA!

 

 

meu problema é: quando eu add um usuario e ele aceita, o campo aceito que é 0 por default vai pra 1, pra mostrar q ele está aceito..

Dai eu quero dar um SELECT para mostrar todos os meus amigos que eu tenho adicionado..tem que aparecer na minha index todos os meus amigos que o aceito = 1.. e na pagina desse amigoo que eu add, tem que aparecer o meu NOME também!..

 

como que faço isso?! se alguem puder me ajudar, eu agradeceria!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente o select que esta no terceiro bloco de codigo abaixo, testei e funcionou com sucesso, porém, como você quer exibir no nome do usuario, este campo deve existir na tabela Usuario, veja o exemplo completo com as duas tabelas que eu montei (usei banco de dados SyBase, o conceito é o mesmo para demais banco de dados).

 

1 -- tabela temporaria de usuarios para teste

DROP TABLE #Usuario
CREATE TABLE #Usuario (
 id_usuario INT NOT NULL, 
 nm_usuario VARCHAR(60),
 PRIMARY KEY (id_usuario) 
)

INSERT INTO #Usuario VALUES (1,'Charles')
INSERT INTO #Usuario VALUES (2,'Mahhbatera')
INSERT INTO #Usuario VALUES (3,'Motta')
INSERT INTO #Usuario VALUES (4,'Joao')
INSERT INTO #Usuario VALUES (5,'Maria')

SELECT * FROM #Usuario

 

2 -- tabela temporaria do relacionamento amizade

DROP TABLE #Usuario_Amigo
CREATE TABLE #Usuario_Amigo (
 id_amizade INT NOT NULL, 
 id_usuario INT NOT NULL, 
 id_usuario_amigo INT NOT NULL, 
 aceito TINYINT DEFAULT 0,
 PRIMARY KEY (id_amizade) 
)

INSERT INTO #Usuario_Amigo VALUES (1, 1, 2, 0)
INSERT INTO #Usuario_Amigo VALUES (2, 1, 3, 1)
INSERT INTO #Usuario_Amigo VALUES (3, 1, 5, 1)
INSERT INTO #Usuario_Amigo VALUES (4, 2, 4, 0)
INSERT INTO #Usuario_Amigo VALUES (5, 3, 5, 1)
INSERT INTO #Usuario_Amigo VALUES (6, 5, 2, 0)
INSERT INTO #Usuario_Amigo VALUES (7, 5, 3, 1)

SELECT * FROM #Usuario_Amigo

 

3 -- Exibe na tela principal index, a listagem de amigos que aceitaram amizade

-- variavel que armazena o id do usuario logado, que esta com a index na tela
DECLARE @id_usuario_logado INT 
SET @id_usuario_logado = 1

-- listagem de amigos que aceitaram amizade
SELECT 
u1.id_usuario, u1.nm_usuario AS 'usuario logado', -- usuario que adicionou
u2.id_usuario, u2.nm_usuario AS 'amigo' -- amigos do usuario logado
FROM #Usuario u1 -- pessoa que adicionou
INNER JOIN #Usuario_Amigo ua -- relacionamento amigos
ON u1.id_usuario = ua.id_usuario
INNER JOIN #Usuario u2 -- pessoa adicionada
ON u2.id_usuario = ua.id_usuario_amigo
WHERE 
u1.id_usuario = @id_usuario_logado -- recupera os amigos do usuario logado
AND ua.aceito = 1 -- status aceito

 

Responde ai se deu certo!

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.