Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP/SQL] Powiadomienia jak na facebooku, (w stronę PHP)
MTF
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 25.02.2010

Ostrzeżenie: (0%)
-----


Umieściłem już tutaj na forum podobny temat w dziale MySQL ( Temat: PHP SQL Powiadomienia jak na facebooku )
Jednak z nikąd pomocy..

Postanowiłem zapytanie poprostu zgrupować i w PHP jakoś to obsłużyć..
Pytanie: jak?

  1. $powiadomienia_engine = mysql_query("SELECT * FROM powiadomienia WHERE do_usera = '".$user_info['id']."' GROUP BY what,type ORDER BY id DESC LIMIT 25");
  2.  
  3. if (mysql_num_rows($powiadomienia_engine) == 0 ) {
  4.  
  5. echo '<div class="nothing_here" style="margin-top: 220px;">Brak powiadomień ;)</div>';
  6.  
  7. } else {
  8.  
  9. while ($powiadomienie = mysql_fetch_array($powiadomienia_engine)) {
  10. //dalsza część kodu


mam zbite powiadomienia i nie wiem za bardzo jak je obsłużyć? Dodać do SQL 'COUNT' i dla każdego osobno wywołać kolejne "query" i na jego podstawie budować powiadomienie?

Chce powiedzieć że chce uzyskać coś takiego: "User1,User2 oraz User3 dodali komentarz do twojego wpisu"..

Może któryś z was "PHPowców" mi pomoże (IMG:style_emoticons/default/wink.gif) bo w tamtym dziale nie uzyskam raczej pomocy (IMG:style_emoticons/default/smile.gif)
P.s. chciałbym ograniczyć ilość połączeń a powyższy pomysł z COUNT do takich raczej nie należy ;x
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
aachi
post
Post #2





Grupa: Zarejestrowani
Postów: 54
Pomógł: 12
Dołączył: 4.08.2007

Ostrzeżenie: (0%)
-----


Zerknąłem na ten drugi wątek i nie wiem czy to o to Ci chodzi... ale jeśli chcesz zamiast 50 powiadomień, że ktoś skomentował jakiś wpis, tylko jeden, to zamiast grupować po prostu posortuj tak, by w osobnych tablicach miał te zdarzenia które chcesz umieścić w jednym powiadomieniu np (poniższy kod nie ma działać ma Ci podsunąć pomysł jak to rozwiązać)

  1. $db= new mysqli('localhost','login','pass','database');
  2.  
  3. //Pobierasz wszystkie nowe powiadomienia dla usera
  4. $r=$db->query('SELECT * FROM powiadomienia WHERE do_usera = '.$user_info['id']) {
  5. if (!$r) { die('Błąd zapytania, albo bazy'); }
  6. else {
  7. while($w=$r->fetch_assoc()) {
  8. //Zapisujesz do tablicy i odrazu "sortujesz" po wymaganych parametrach (czyli chyba chcesz po "type" i po "what")
  9. $wynik[$w['what']][$w['type']][$w['od_usera']]=$w; //['od_usera'] jest po to, że jeśli dany user wstawił 20 komunikatów do tego samego obiektu, to przy generowaniu pojawi się tylko informacja o jednym komunikacie
  10. }


I teraz w zmiennej $wynik masz posortowane elementy... Czyli jeśli user dostał 50 komentarzy (type=3) od różnych osób odnośnie tego samego elementu (what=10), to w $wynik[10][3] masz array zawierającą 50 wierszy z bazy z których chcesz utworzyć jeden komunikat

  1. $komunikat='Dodano komentarz do czegośtam od: ';
  2. foreach ($wynik[10][3] as $v) $komunikat.=$v['od_usera'].', ';


By ładnie wszystko działało będziesz musiał zagnieździć 3 foreach i dla każdego typu generować inny komunikat.

Edit: Jeśli niektórych typów nie chcesz grupować to też przy takim podejściu nie ma problemu... poprostu dla type=ileśtam generujesz wiele komunikatów zamiast jednego połączonego.

Ten post edytował aachi 28.08.2012, 18:56:42
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 14:13