Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, estou desenvolvendo um sistema semelhante ao twitter, porém estou com um pequeno problema em exibir as postagens do usuário e de seus amigos. Alguém poderia me ajudar?
Tabela POSTS
id_postagem int(11) auto_increment,
id_usuario int(11) NOT NULL,
mensagem text,
PRIMARY KEY(id_postagem)
Tabela AMIGOS
id_amigo int(11) auto_increment,
id_usuario1 int(11) NOT NULL,
id_usuario2 int(11) NOT NULL,
PRIMARY KEY(id_amigo)
Arquivo index.php
$id = $_SESSION['id_usuario'];
$captura = mysql_query("SELECT id_usuario1, id_usuario2 FROM amigos WHERE id_usuario1 = '$id' OR id_usuario2 = '$id' ");
while($linha = mysql_fetch_array($captura)){
$amigo = $linha['id_usuario1'];
$amigo2 = $linha['id_usuario2'];
}
$captura_post = mysql_query("SELECT mensagem FROM posts WHERE id_usuario = '$amigo' OR id_usuario = '$amigo2' ");
while($linha2 = mysql_fetch_array($captura_post)){
$mensagem = $linha2['mensagem'];
}
echo $mensagem;
O problema é que ele retorna as minhas postagens e apenas a postagem do meu último amigo. O que eu faço?
>
INNER JOIN:
SELECT * FROM posts AS p
INNER JOIN amigos AS a
ON a.usuario2 = p.id_usuario
AND
p.usuario1 = p.id_usuario
WHERE p.id_usuario = $_SESSION['id_usuario']~
Tente assim.
Valew pela resposta, mas eu tentei aqui e não consegui.
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\Program Files
mandei ele dar um mysql_error();
Parse error: syntax error, unexpected T_STRING in C:\Program Files
Opa, acho que foi o ~ que digitei sem querer. Tente.
>
Opa, acho que foi o ~ que digitei sem querer. Tente.
Eu percebi, infelizmente não foi isso.
Eu preciso declarar alguma coisa quando crio as tabelas no BD para poder usar o INNER JOIN?
O INNER JOIN serve, pra tipo, você tem duas tabelas, com os mesmos dados, mas podem ter colunas diferentes.
Exemplo:
Temos a tabela com dados dos usuários:
>
id | nome | email | idade | nivel1 | Gabriel | gamjj74@hotmail.com | 13 | admin
2 | João | joão@hotmail.com | 16 | comum
3 | Lucas | lucas@hotmail.com | 18 | comum
4 | Bruno | bruno@hotmail.com | 22 | admin
Agora temos uma tabela com pontos de algum jogo dos usuários, com somente os que pontuaram, ou seja, João, Lucas e Bruno (ids: 2, 3 e 4):
>
id | id_usuario | pontos1 | 4 | 1420
2 | 3 | 1899
3 | 2 | 2500
Agora queremos mostrar os pontos dos usuários que são administradores:
SELECT u.nome, p.pontos
FROM pontos AS p
INNER JOIN usuarios AS u
ON p.id_usuario = u.id
WHERE u.nivel = 'admin'
Saída:
Bruno | Pontos: 1420
Agora se eu quiser somente os usuários comuns:
SELECT u.nome, p.pontos
FROM pontos AS p
INNER JOIN usuarios AS u
ON p.id_usuario = u.id
WHERE u.nivel = 'comum'
Saída:
João | Pontos: 1420Lucas | Pontos: 1899
Uma mudança naquele SELECT:
SELECT * FROM posts AS p
INNER JOIN amigos AS a
ON a.usuario2 = p.id_usuario
AND
p.usuario1 = p.id_usuario
AND
a.id_usuario = $_SESSION['id_usuario']
INNER JOIN:
SELECT * FROM posts AS p
INNER JOIN amigos AS a
ON a.usuario2 = p.id_usuario
AND
p.usuario1 = p.id_usuario
WHERE p.id_usuario = $_SESSION['id_usuario']~
Tente assim.