Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak zrobić grupowanie bez ładowania do pamięci (tabeli)
neotec
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 12.04.2008

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


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
artega
post
Post #2





Grupa: Zarejestrowani
Postów: 174
Pomógł: 42
Dołączył: 22.07.2007
Skąd: /dev/random

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


  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.
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: 8.10.2025 - 11:43