Ir para conteúdo

Arquivado

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

PrzFernando

Select

Recommended Posts

E aí pessoal, beleza?

 

Estou com uma dúvida, vamos ao inicio...

Eu tenho uma tabela no meu banco de dados chamada "following". nela tem a ID do usuário que está sendo seguido e o usuário que segue (user_id; follower_id).

Tenho outra tabela com o nome de "posts" (id; poster_id; body; likes; stamp).

 

 

Agora eu gostaria de selecionar apenas os posts dos usuários que sigo. Alguém pode me dar uma noção ou algo relacionado?

 

 

Grato desde já, abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá! Você primeiro pode pegar todos os usuarios que segue. E nele "Dentro de um laço de repetição", você pode buscar na tabela posts, informando o id do usuário que você segue.

 

Acredito que a lógica sera assim :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que é isso que você precisa qualquer dúvida.

 

aquele $connDB é a variável de conexão com banco.

<?php 

$IDUser = ""; // Aqui você realiza uma consulta ao banco trazendo o user_id 

$query_rsListaPosts = "SELECT * FROM NOME_DA_SUA_TABELA WHERE poster_id = '$IDUser'";
$rsListaPosts = mysql_query($query_rsListaPosts, $connDB) or die(mysql_error());
$row_rsListaPosts = mysql_fetch_assoc($rsListaPosts);


do{

echo $row_rsListaPosts['Titulo']; // exemplo de como chamar um dado da tabela

}while($row_rsListaPosts = mysql_fetch_assoc($rsListaPosts));


?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos em partes:

  • Você deve saber qual o seu id, digamos que o meu id é o 100 (você pode ser o administrador, mas eu não sou, kk), por enquanto a SQL fica assim:
SELECT meu.id, meu.nome FROM usuarios meu WHERE meu.id = 100
  • Faremos um INNER JOIN para saber quem eu sigo:
SELECT meu.id, meu.nome, f.follower_id id_eu_sigo
FROM usuarios meu
INNER JOIN following f ON f.user_id = meu.id
WHERE meu.id = 100
  • Encontraremos os posts dos usuários que sigo:
SELECT meu.id, meu.nome, f.follower_id id_eu_sigo, p.poster_id post_publicado
FROM usuarios meu
INNER JOIN following f ON f.user_id = meu.id
INNER JOIN posts p ON p.id = f.follower_id
WHERE meu.id = 100
  • Se for necessário informar o nome do usuário que sigo:
SELECT meu.id, meu.nome, f.follower_id id_eu_sigo, eu_sigo.nome nome_eu_sigo, p.poster_id post_publicado
FROM usuarios meu
INNER JOIN following f ON f.user_id = meu.id
INNER JOIN usuarios eu_sigo ON f.follower_id = eu_sigo.id
INNER JOIN posts p ON p.id = f.follower_id
WHERE meu.id = 100

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Acho que é isso que você precisa qualquer dúvida.

 

aquele $connDB é a variável de conexão com banco.

<?php 

$IDUser = ""; // Aqui você realiza uma consulta ao banco trazendo o user_id 

$query_rsListaPosts = "SELECT * FROM NOME_DA_SUA_TABELA WHERE poster_id = '$IDUser'";
$rsListaPosts = mysql_query($query_rsListaPosts, $connDB) or die(mysql_error());
$row_rsListaPosts = mysql_fetch_assoc($rsListaPosts);


do{

echo $row_rsListaPosts['Titulo']; // exemplo de como chamar um dado da tabela

}while($row_rsListaPosts = mysql_fetch_assoc($rsListaPosts));


?>

E no caso se eu tiver seguindo 2 pessoas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

E no caso se eu tiver seguindo 2 pessoas?

 

Nesse caso dentro do 'WHERE' você utiliza um 'and' e assim quantas consultas você precisar inclusive em outras colunas da tabela.

 

segue o exemplo abaixo:

<?php 

$IDUser = ""; // Aqui você realiza uma consulta ao banco trazendo o user_id 

$IDUser2 = ""; // Aqui você realiza uma consulta ao banco trazendo o user_id

$query_rsListaPosts = "SELECT * FROM NOME_DA_SUA_TABELA WHERE poster_id = '$IDUser' and poster_id = '$IDUser2' ";
$rsListaPosts = mysql_query($query_rsListaPosts, $connDB) or die(mysql_error());
$row_rsListaPosts = mysql_fetch_assoc($rsListaPosts);


do{

echo $row_rsListaPosts['Titulo']; // exemplo de como chamar um dado da tabela

}while($row_rsListaPosts = mysql_fetch_assoc($rsListaPosts));


?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

Nesse caso dentro do 'WHERE' você utiliza um 'and' e assim quantas consultas você precisar inclusive em outras colunas da tabela.

 

segue o exemplo abaixo:

<?php 

$IDUser = ""; // Aqui você realiza uma consulta ao banco trazendo o user_id 

$IDUser2 = ""; // Aqui você realiza uma consulta ao banco trazendo o user_id

$query_rsListaPosts = "SELECT * FROM NOME_DA_SUA_TABELA WHERE poster_id = '$IDUser' and poster_id = '$IDUser2' ";
$rsListaPosts = mysql_query($query_rsListaPosts, $connDB) or die(mysql_error());
$row_rsListaPosts = mysql_fetch_assoc($rsListaPosts);


do{

echo $row_rsListaPosts['Titulo']; // exemplo de como chamar um dado da tabela

}while($row_rsListaPosts = mysql_fetch_assoc($rsListaPosts));


?>

Quando uso o comando "and" o MySQL não retorna nada. :\, não é a primeira vez que ele não responde ao comando and...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa por ser chato :pinch:

 

mas gostaria que desse uma olhada nisso, o MySQL não retorna todos os ID, apenas um. Segue o código:

$premanifest = mysql_query("SELECT * FROM following WHERE follower_id = $me[id]") or die(mysql_error());
while($manifestposts = mysql_fetch_array($premanifest)){

$help = "or poster_id = '$manifestposts[user_id]' ";

 $sql = mysql_query("SELECT * FROM posts WHERE poster_id = '$me[id]' $input order by id DESC limit 10");
 }

Quando executo o echo do $help, ele imprime certinho, mas na query parece que ele não entende...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Substitua:

$sql = mysql_query("SELECT * FROM posts WHERE poster_id = '$me[id]' $input order by id DESC limit 10");

Por:

$sql = mysql_query("SELECT * FROM posts WHERE poster_id = '$me[id]' $help order by id DESC limit 10");

Mas ainda assim aconselho fazer como propus no #4, kk.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Substitua:

$sql = mysql_query("SELECT * FROM posts WHERE poster_id = '$me[id]' $input order by id DESC limit 10");

Por:

$sql = mysql_query("SELECT * FROM posts WHERE poster_id = '$me[id]' $help order by id DESC limit 10");

Mas ainda assim aconselho fazer como propus no #4, kk.

Ops sim, essa parte que citou foi um erro de digitação meu aqui mesmo, no código ele já está assim e ele não retorna todos. :\

Compartilhar este post


Link para o post
Compartilhar em outros sites
SELECT meu.id AS meu_id, meu.nome AS meu_nome, f.follower_id AS id_eu_sigo, eu_sigo.nome AS nome_eu_sigo, p.id AS post_publicado, p.body AS post_completo, p.likes AS post_likes, p.stamp AS post_horario
FROM usuarios AS meu
INNER JOIN following AS f ON f.user_id = meu.id
INNER JOIN usuarios AS eu_sigo ON f.follower_id = eu_sigo.id
INNER JOIN posts AS p ON p.poster_id = f.follower_id
WHERE meu.id = 100 # id do usuário logado

Sempre que eu utilizo 'AS' após o nome de um campo, ou de uma tabela, estou utilizando um ALIAS, torna-se mais fácil identificá-los ao utilizar um ALIAS, e qual ALIAS deve ser utilizado, cabe somente ao entendimento do desenvolvedor.

 

Com esta consulta, acredito que você consiga todas as informações necessárias em uma única consulta ao banco de dados. Depois disso, utiliza o exemplo #3 para printar na tela cada linha.

 

Acredito que este seja a solução mais cabível ao fórum MySQL. :P

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.