Afisare postari de la prieteni

Am facut un sistem de prieteni si vreau sa afisez postarile prietenilor descrescator

Toate postarile le afisez asa

    $query = $conn->query("SELECT * FROM posts WHERE ORDER BY id DESC LIMIT 10");
    
    if($query->rowCount() > 0){ 
        while($row = $query->fetch(PDO::FETCH_ASSOC)){ 
                $PostId          = $row["id"];
                $PostDescription = $row["post"];

				echo ''.$PostId.'<br>';      
				echo ''.$PostDescription.'<br>';
		}
	}

Intr-o pagina noua vreau sa afisez postari doar de la prieteni
Asa ca am facut ceva de genul

foreach (PrieteniiMei($user['uid']) as $PrietenulMeu) {
$PrietenID = $PrietenulMeu['user_id'] ;


    $query = $conn->query("SELECT * FROM posts WHERE author = ".$PrietenID." ORDER BY id DESC LIMIT 10");
    
    if($query->rowCount() > 0){ 
        while($row = $query->fetch(PDO::FETCH_ASSOC)){ 
                $PostId          = $row["id"];
                $PostDescription = $row["post"];

				echo ''.$PostId.'<br>';      
				echo ''.$PostDescription.'<br>';
		}
	}	
}

Functioneaza, imi afiseaza postarile prietenilor, dar imi afiseaza mai intai toate postarile unui prieten apoi toate postarile altui prieten si tot asa.
Nu le afiseaza in ordinea desc id-ului din “posts”
Ce as putea sa fac?

mai multe solutii:

  1. union de selecturi dupa care order by id
  2. select from posts where author in (id1, id2) dupa ce scoti id-urile prietenilor.
  3. la metoda ta, in loc sa afisezi direct in foreach, construiesti intai un array cu toate posturile, apoi il ordonezi si mai iterezi o data pentru afisare.

Bineinteles, nici una din solutii nu e scalabila pentru un numar mare de prieteni.

1 Like

Multumesc, m-a ajutat acel “in”

aia cu “in” e intr-adevar cam cea mai eleganta dintre solutii.

1 Like

Se poate și fără foreach…
Presupunem că avem o tabelă friends:

friends (many to many)
--------
id (pk)
user_id (fk, users)
friend_id (fk, users)
created_on
SELECT p.* 
FROM friends f JOIN posts p on f.friend_id = p.author
WHERE f.user_id = :user_id
ORDER BY p.id DESC LIMIT 10

unde :user_id este luat din sesiune (utilizatorul curent)

(n-am testat, posibil să nu meargă)

1 Like