Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak zrobić grupowanie bez ładowania do pamięci (tabeli)
Forum PHP.pl > Forum > PHP
neotec
Odczytuję dane z tabeli SQL gdzie mam takie pola jak "kategoriia", "producent", "nazwa" itd.

Dane potrzebuję wyświetlać pogrupowane najpierw wg. "kategorii" potem wg. "producenta".

Do tej pory robiłem to tak:

Kod
$result = msqli->query ("select * tab ...");
$atab = array ();
while ($awiersz = $result->fetch_assoc ()) $atab[$arec['kategoria']][$arec['producent']][] = $awiersz;


A potem w pętlach foreach () wyświetlałem moje dane:

Kod
foreach ($atab as $kategoria => $akategorie) {
    echo $kategoria.'<br>';
    foreach ($akategorie as $producent => $aproducenci) {
        echo $producent.'<br>';
        foreach ($aproducenci as $inx => $awiersz) {
            print_wiersz ($awiersz);
        }
    }
}


Jak zrobić, elegancko, aby NIE wrzucać danych do pośredniczącej tabeli
wielo-wymiarowej $atab, tylko od razu wyświetlać je pogrupowane na ekran?
artega
Czy stosujesz klauzule ORDER BY w zapytaniu?
  1. SELECT * FROM tabela ORDER BY kategoria, producent

W ten sposób otrzymasz posortowane dane według kategorii a następnie producenta.
neotec
Stosuję ale raczej wg. innych pól np. ceny.

A ja chciałem uzyskać to aby każda grupa miała swój nagówek/tytuł, np:

# Monitory
* Samsung:
- sam 1
- sam 2
* Iiyama
- iiya 1
- iiya 2
# Procesory
* Intel
- intel 1
- celeron 2
* AMD
- amd 1
- amd 2
artega
  1. <?php
  2.  
  3. $ostatnia_kategoria = "";
  4. $ostatni_producent = "";
  5.  
  6. mysql_query("SELECT * FROM tabela ORDER BY kategoria, producent, cena");
  7.  
  8. while ($wynik = mysql_fetch_assoc())
  9. {
  10. if ($wynik['kategoria'] != $ostatnia_kategoria)
  11. {
  12. echo "<br><b>#".$wiersz['kategoria']."</b>";
  13. $ostatni_producent = "";
  14. }
  15. if ($wynik['producent'] != $ostatni_producent)
  16. {
  17. echo "<br><i>*".$wiersz['producent']."</i>";
  18. }
  19. echo "<br>".$wynik['nazwa'];
  20. }
  21.  
  22. ?>

Nawiązanie połączenia do bazy musisz przerobić sam. W przykładzie wystarczy zmienić nazwy pól na takie jakie masz w bazie.
neotec
dzęki, tak tez zrobiłem
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.