Ir para conteúdo

POWERED BY:

Arquivado

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

roxerio

Como usar o foreach sem retornar duas vezes o mesmo registro?

Recommended Posts

Em uma rede social, para fazer o feed de notícias, preciso das postagens em que o usuário conectado ou algum de seus amigos foi a pessoa que postou ou a pessoa para quem postaram.


Na tabela, quem postou está na coluna added_by. E para quem foi postado está na coluna user_posted_to. E body é a coluna onde está o texto postado.


A variável com o nome do usuário conectado é $user. A variável para o nome de seus amigos é $value.


E pode ser que a pessoa postou para si mesma, estando o nome dela em ambas as colunas.


Quando vou tentar fazer o feed de notícias, aparece sempre alguns repetidos.


Já tentei usar GROUP by e DISTINCT, mas como sou iniciante, posso não estar usando direito.


  1. <?php include ( "inc/header.inc.php" );
  2. if (isset($_GET['u'])) {
  3. $username = mysqli_real_escape_string($link,$_GET['u']);
  4. if (ctype_alnum($username)) {
  5. $check = mysqli_query($link,"SELECT username FROM users WHERE username='$username'");
  6. if (mysqli_num_rows($check)!= "") {
  7. $get = mysqli_fetch_assoc($check);
  8. $username = $get['username'];
  9. }
  10. else
  11. {
  12. echo "<meta http-equiv=\"refresh\" content=\"0; url=http://localhost/howcode/index.php\">";
  13. exit ();}}}
  14. $selectFriendsQuery = mysqli_query ($link, "SELECT friend_array FROM users WHERE username='$user'");
  15. $friendRow = mysqli_fetch_assoc($selectFriendsQuery);
  16. $friendArray = $friendRow['friend_array'];
  17. if ($friendArray != "") {
  18. $friendArray = explode(",",$friendArray);
  19. foreach ($friendArray as $value){
  20. $getposts = mysqli_query($link, "SELECT * FROM posts WHERE user_posted_to='$value' or added_by='$value' xor added_by='$user' or user_posted_to='$user'") or die (mysqli_error());
  21. while ($teste = mysqli_fetch_assoc ($getposts)){
  22. echo $teste['body']."<br/>";
  23. }
  24. }
  25. }
  26. ?>

Depois de pensar um pouco, vi que o problema está no foreach, eu acho. pois em cada loop ele pega os dados de novo. Mas continuo sem saber como resolver. Deu para entender agora? Me ajudem, por favor...


Compartilhar este post


Link para o post
Compartilhar em outros sites

Ou DISTINCT , mas o problema não me ficou claro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou explicar de novo, ficou muito confuso mesmo. Em uma rede social, para fazer o feed de notícias, preciso das postagens em que o usuário conectado ou algum de seus amigos foi a pessoa que postou ou a pessoa para quem postaram.

Na tabela, quem postou está na coluna added_by. E para quem foi postado está na coluna user_posted_to. E body é a coluna onde está o texto postado.

A variável com o nome do usuário conectado é $user. A variável para o nome de seus amigos é $value.

E pode ser que a pessoa postou para si mesma, estando o nome dela em ambas as colunas.

Quando vou tentar fazer o feed de notícias, aparece sempre alguns repetidos.

Já tentei usar GROUP by e DISTINCT, mas como sou iniciante, posso não estar usando direito.

<?php include ( "inc/header.inc.php" );
if (isset($_GET['u'])) {
	$username = mysqli_real_escape_string($link,$_GET['u']);
	if (ctype_alnum($username)) {
	$check = mysqli_query($link,"SELECT username FROM users WHERE username='$username'");
	if (mysqli_num_rows($check)!= "") {
		$get = mysqli_fetch_assoc($check);
		$username = $get['username'];
	}
	else
	{
	echo "<meta http-equiv=\"refresh\" content=\"0; url=http://localhost/howcode/index.php\">";
	exit ();}}}
$selectFriendsQuery = mysqli_query ($link, "SELECT friend_array FROM users WHERE username='$user'");
$friendRow = mysqli_fetch_assoc($selectFriendsQuery);
$friendArray = $friendRow['friend_array'];
if ($friendArray != "") {
	$friendArray = explode(",",$friendArray);
    foreach ($friendArray as $value){
			$getposts = mysqli_query($link, "SELECT * FROM posts WHERE user_posted_to='$value' or added_by='$value' xor added_by='$user' or user_posted_to='$user'") or die (mysqli_error());
			while ($teste = mysqli_fetch_assoc ($getposts)){
				echo $teste['body']."<br/>";
			}
	}
}
?>

Depois de pensar um pouco, vi que o problema está no foreach, eu acho. pois em cada loop ele pega os dados de novo. Mas continuo sem saber como resolver. Deu para entender agora? Me ajudem, por favor...

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.