Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Tworzenie kilku wiadomosci w jedna, tak jak w gmail
Forum PHP.pl > Forum > Przedszkole
!*!
Nie mam pomysłu jak mógłbym wykonać "scalenie" kilku wiadomości w jedną...

Obecnie odczytuję wiadomości z bazy na zasadzie:


Kod
stefan
stefan
stefan
ola
ola
stefan
zuzia


Chciałbym to jakoś pogrupować, gmail robi to tak:

Kod
stefan (3)
ola (2)
stefan
zuzia


Mógłby ktoś dać jakieś światło jak można uzyskać taki efekt?
AxZx
  1. SELECT count(nadawca), nadawca.... GROUP BY nadawca
!*!
Właśnie mam z tym problem, obecnie zapytanie wygląda tak:

  1. <?php
  2. $zap= "SELECT m.*,u.id,u.login FROM `mail` AS m, `userdata` AS u WHERE m.odbiorca = $userid AND m.nadawca=u.id ORDER BY m.id_mail DESC LIMIT ".(($s-1)*$iloscrekordow).", $iloscrekordow";
  3. ?>


dodaję GROUP BY :

  1. <?php
  2. $zap= "SELECT m.*,u.id,u.login FROM `mail` AS m, `userdata` AS u WHERE m.odbiorca = $userid AND m.nadawca=u.id GROUP BY u.login ORDER BY m.id_mail DESC LIMIT ".(($s-1)*$iloscrekordow).", $iloscrekordow";
  3. ?>


Jednak mam wrażenie że nie tak to powinno być...
erix
A gdzie masz count? Jeśli chcesz policzyć wszystkie wiadomości, to nie dorzucaj LIMIT.
!*!
Limit to sposób na stronicowanie.
erix
No ja rozumiem, że na stronicowanie, ale w ten sposób nie policzysz wszystkich wiadomości. winksmiley.jpg

Policzy Ci tylko ilość wiadomości w tych kategoriach na bieżącej stronie, a nie o to chyba Ci chodzi.
piotrooo89
nie masz liczenia za pomocą COUNT, jak już było wspomniane. dodaj je.
!*!
ok, dodałem jendak teraz w ogóle nie uzyskuje rekordów...
  1. <?php
  2. $zap= "SELECT m.*,u.id,u.login COUNT m.id_mail FROM `mail` AS m, `userdata` AS u WHERE m.odbiorca = $userid AND m.nadawca=u.id GROUP BY login ORDER BY data_wyslania DESC LIMIT ".(($s-1)*$iloscrekordow).", $iloscrekordow";
  3. ?>


kurde ale sobie to skomplikowałem... Przepiszę to od poczatku w elu obadania błędu...
erix
A czytałeś, co to jest count w MySQL? Podstawy. tongue.gif
piotrooo89
patrzyłeś w ogóle do manuala? chyba nie... COUNT
melkorm
najpierw musisz zliczyć ilosć mail'i dla każdego uzytkownika bez LIMIT'ów , i pobrać tylko id uzytkownika(czy tam login, po tym po czym grupujesz) i stworzyć tabliće w postaci :
Kod
$tablica[login] = $ilosc;


nastepne zapytanie to tylko pobranie z distinct i limitem, i przy wyświetlaniu dajesz :

  1. <?php
  2. echo " jakas nazwa {$tablica[$login]}";
  3. ?>


coś w tym stylu .... .
AxZx
[ot]
mamy tutaj przykład na to, że forum zabija kreatywność.
zamiast poszperać trochę, poczytać o możliwościach DBMS to od razu pisze się na forum tłumacząc, że jest się początkującym.
i to nie tylko chodzi o tego użytkownika bo już dawno to zaobserwowałem.
!*!
fajna ksywa:P
melkorm
[ot]
Dlatego staram się wyjasniać w miarę swojej wiedzy , a nie pisać gotowców - zawsze czegoś ja moge się nauczyć (jeżeli ktoś poda inną mozliwość, lub poprawi moje błędy) , a także użytkownik sam pisząc kod i łapiąc idee smile.gif
[/ot]
!*!
przyznam że nie rozumiem ...

zliczenie:

  1. <?php
  2. $zapytajsql = "SELECT COUNT(*) as ilewiadomosci FROM mail WHERE odbiorca = $userid ";
  3. $result = mysql_query($zapytajsql);
  4. $wynik = mysql_fetch_assoc($result);
  5. ?>


$wynik['ilewiadomosci']; - daje Nam przykladowo 104 wiadomości

  1. <?php
  2. $zap= "SELECT m.*,u.id,u.login, COUNT(m.nadawca) FROM `mail` AS m, `userdata` AS u WHERE m.odbiorca = $userid AND m.nadawca=u.id GROUP BY m.nadawca ORDER BY m.data_wyslania DESC LIMIT ".(($s-1)*$iloscrekordow).", $iloscrekordow";
  3. $quer = mysql_query($zap);
  4. ?>


wyświetla mi 5 osób od których były wiadomości... Ok, ale jak to zrobić aby uzyskać taki efekt jaki opisałem w pierwszym poście?
erix
Wywal LIMIT, gdyż obecnie ograniczasz zliczanie do rekordów wg bieżącej strony.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.