Jump to content
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.

Share this post


Link to post
Share on other 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 :)

Share this post


Link to post
Share on other 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));


?>

Edited by Matheus Marques_170218

Share this post


Link to post
Share on other 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
Edited by lokaodomau

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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));


?>

Share this post


Link to post
Share on other 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...

Share this post


Link to post
Share on other 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...

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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. :\

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.