Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> 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
artega
post
Post #2





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

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


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.
Go to the top of the page
+Quote Post
neotec
post
Post #3





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

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


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
Go to the top of the page
+Quote Post
artega
post
Post #4





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
neotec
post
Post #5





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

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


dzęki, tak tez zrobiłem
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 02:21