Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: grupowanie oraz wyswietlanie wynikow
Forum PHP.pl > Forum > PHP
majesgrudziadz
Witam nie mogę sobie poradzić z grupowaniem i wyświetlaniem wyników z bazy mysql...

1 tabela

id | level | localized_name
1 | 1 | nazwa 1
1 | 1 | nazwa 2
1 | 1 | nazwa 3
1 | 2 | nazwa 4
4 | 1 | nazwa 1
5 | 1 | nazwa 3
6 | 2 | nazwa 4
5 | 2 | nazwa 5
5 | 3 | nazwa 6
5 | 4 | nazwa 7


2 tabla

id | nick
1 | nick 1
4 | nick 2
5 | nick 3
6 | nick 4


a wyświetlać bym chciał tak:



LEVEL 1
nazwa 1 (nick1, nick2)
nazwa 2 (nick1)
nazwa 3 (nick1, nick3)

LEVEL 2
nazwa 4 (nick1, nick4)
nazwa 5 (nick3)

LEVEL 3
nazwa 6 (nick3)

LEVEL 4
nazwa 7 (nick3)



czy może mi ktoś pomóc ułożyć zapytanie MySQL i ewentualnie z kodem PHP ? mecze się od 1h :/



UP

nikt nie wie jak to pogrupowac ?
Greg0
Powinieneś przeprojektować bazę i zastosować relację wiele do wielu.
Sephirus
  1. SELECT t1.level, t1.nazwa, GROUP_CONCAT(t2.nick ORDER BY t2.nick SEPARATOR ', ') AS nicki FROM tabela_1 AS t1
  2. JOIN tabela_2 AS t2 ON t1.id = t2.id
  3. GROUP BY t1.localized_name
  4. ORDER BY t1.level ASC


To Ci powinno zwrócić coś takiego:

Kod
level | nazwa | nicki

1 | Nazwa 1 | nick1, nick2
1 | Nazwa 2 | nick1
1 | Nazwa 3 | nick1, nick3
2 | Nazwa 4 | nick1, nick4
... itd ...


A to w PHP już można ładnie pokazać
majesgrudziadz
hmm ok nie rozumie tylko jak to pokazac smile.gif


bo chce uzyskac cos takiego

LEVEL 1
nazwa 1 (nick1, nick2)
nazwa 2 (nick1)
nazwa 3 (nick1, nick3)

LEVEL 2
nazwa 4 (nick1, nick4)
nazwa 5 (nick3)

LEVEL 3
nazwa 6 (nick3)

LEVEL 4
nazwa 7 (nick3)
Sephirus
  1. $query = mysql_query("... ten sql powyżej ...");
  2.  
  3. $lastLevel = 0;
  4. while($r = mysql_fetch_assoc($query)) {
  5. if($lastLevel != $r['level']) {
  6. echo 'LEVEL '.$r['level'].'<br/>';
  7. $lastLevel = $r['level'];
  8. }
  9.  
  10. echo $r['nazwa'] .' ('.$r['nicki'].')<br/>';
  11. }


Takie trudne? smile.gif
majesgrudziadz
Takie oczywiste i nie trudne ... ale dzis jakos wszystko mi z trudem przychodzi sad.gif
dzieki za pomoc .... teraz juz poskladam to tak jak mi potrzeba smile.gif

pozdrawiam

Mam jeszcze jeden problem ...

GROUP_CONCAT(t2.nick ORDER BY t2.nick SEPARATOR ', ') laczy nicki dodaje przecinek natomiast ma ograniczona ilosc znakow ... nie pokazuje wszystkich nickow ... jak temu zaradzic ... max nickow moze byc 100



i kolejny problem nie wiem jak i gdzie dodac do tego zapytania aby liczylo mi ilosc nickow na danym levelu w danej nazwie


  1. SELECT t1.level, t1.localized_name, GROUP_CONCAT(t2.nick ORDER BY t2.nick SEPARATOR ', ') AS nicki FROM czolg_list AS t1
  2. JOIN gracz_list AS t2 ON t1.id = t2.id
  3. GROUP BY t1.localized_name
  4. ORDER BY t1.level DESC
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.