Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]grupowanie wyników
Forum PHP.pl > Forum > Przedszkole
Reiven
Witam,
mam problem z grupowaniem wyników..
Mam taką tabele:

Koszyk
ID | CO......| KOLOR....| cena
1...|pasek...| niebieski | 12
2...|spodnie.| szary.....| 1
3...|pasek....| zielony...| 2
4...|pasek....| czerwony| 3

mam taki skrypt:
  1. <?php
  2. $categories = array();
  3. while ($row = mysql_fetch_array($result)){
  4.  $cid = $row['id'];
  5.   if (!isset($categories[$cid]))
  6.    $categories[$cid] = array('co' => $row['co']);
  7.  
  8.  //dodajemy do kategorii kolejne produkty
  9.  if (!empty($row['co'])) //jeśli istnieje produkt
  10.    $categories[$cid]['products'][] = array('kolor' => $row['kolor'], 'cena'=>$row['cena']);
  11.    }
  12.    
  13.    //print_r($categories); //do obejrzenia jak wygląda wygenerowana tablica
  14.    
  15. echo '<ul>';
  16. foreach ($categories as $idCat => $category){ //petla, która leci po kategoriach
  17.  echo '<li>'.$category['co'].' (liczba produktow: '.count($category['products']).')<ul>';
  18.  foreach ($category['products'] as $product){ //pętla, która leci po produktach w kategorii
  19.    echo '<li>Kolor: <b>'.$product['kolor'].'</b> </li><li>Cena: <b>'.$product['cena'].'</b></li>';
  20.  }
  21.  echo '</ul></li>';
  22. }
  23. echo '</ul>';
  24. ?>


który wyświetla mi tak:

  1. <?php
  2. * Pasek (liczba produktow: 1)
  3.          o Kolor: niebieski
  4.          o Cena: 12
  5.    * Spodnie (liczba produktow: 1)
  6.          o Kolor: szary
  7.          o Cena: 1
  8.    * Pasek (liczba produktow: 1)
  9.          o Kolor: zielony
  10.          o Cena: 2
  11.    * Pasek (liczba produktow: 1)
  12.          o Kolor: czerwony
  13.          o Cena: 3
  14. ?>


a chciałbym żeby było tak:
  1. <?php
  2. * Pasek (liczba produktow: 3)
  3.          o Kolor: niebieski
  4.          o Cena: 12
  5.          o Kolor: zielony
  6.          o Cena: 2
  7.          o Kolor: czerwony
  8.          o Cena: 3
  9.  
  10.    * Spodnie (liczba produktow: 1)
  11.          o Kolor: szary
  12.          o Cena: 1
  13. ?>


siedzę już 2dni nad tym i nie mogę dojść do celu :/
Pomoże mi ktoś?
TrevorGryffits
Pokaż jakie masz zapytanie.
Reiven
takie:

  1. $query = "SELECT * from koszyk where kogo='$zaloguj_login2' AND sell = '0' ORDER BY co DESC ";
TrevorGryffits
Najpierw poczytaj o GROUP BY, potem zastosuj w zapytaniu i pokaż jak będzie działać. Chyba, że zacznie działać od razu.
Reiven
zrobiłem takie zapytanie:

  1. $query = "SELECT id, co, kolor, cena from koszyk where kogo='$zaloguj_login2' AND sell = '0' GROUP BY co ORDER BY co DESC ";


i wyświetla mi teraz tak:

  1. <?php
  2. * Pasek (liczba produktow: 1)
  3.         o Kolor: niebieski
  4.         o Cena: 12
  5.    * Spodnie (liczba produktow: 1)
  6.         o Kolor: szary
  7.         o Cena: 1
  8. ?>


czyli jeszcze nie do końca prawidłowo..
TrevorGryffits
Pokaż jak wygląda tablica $categories
Reiven
tak:
Kod
 Array ( [236] => Array ( [co] => Stopka damska z lurexem (5907513000105) [products] => Array ( [0] => Array ( [kolor] => beż [cena] => 10000 ) ) ) [234] => Array ( [co] => Skarpetka męska klasyczna bezuciskowa (5907513000143) [products] => Array ( [0] => Array ( [kolor] => brąz [cena] => 10000 ) ) ) [237] => Array ( [co] => Getry [products] => Array ( [0] => Array ( [kolor] => groszek [cena] => 10000 ) ) ) )
TrevorGryffits
Pisane z palca:
  1. <?php
  2. while ($row = mysql_fetch_array($result)){
  3.    $categories[$row['co']][] = array('kolor' => $row['kolor'], 'cena' => $row['cena']);
  4. }
  5. ?>

Wyprintuj sobie $categories, to zobaczysz jak wygląda tablica... W takim układzie nie musisz stosować GROUP BY.

Dwie edycje... Zły dzień...
Reiven
nie rozumiem.. zamiast czego mam to wstawić?
TrevorGryffits
Zamiast:
  1. <?php
  2. while ($row = mysql_fetch_array($result)){
  3. $cid = $row['id'];
  4.  if (!isset($categories[$cid]))
  5.   $categories[$cid] = array('co' => $row['co']);
  6.  
  7. //dodajemy do kategorii kolejne produkty
  8. if (!empty($row['co'])) //jeśli istnieje produkt
  9.   $categories[$cid]['products'][] = array('kolor' => $row['kolor'], 'cena'=>$row['cena']);
  10.   }
  11. ?>
Reiven
usunąłem z zapytania group by co,
zrobiłem tak jak napisałeś i mam błąd

  1. <?php
  2. $categories = array();
  3. #while ($row = mysql_fetch_array($result)){
  4. #$cid = $row['id'];
  5. #  if (!isset($categories[$cid]))
  6. #  $categories[$cid] = array('co' => $row['co']);
  7.  
  8. //dodajemy do kategorii kolejne produkty
  9. # if (!empty($row['co'])) //jeśli istnieje produkt
  10. #   $categories[$cid]['products'][] = array('kolor' => $row['kolor'], 'cena'=>$row['cena']);
  11. #   }
  12.  
  13. while ($row = mysql_fetch_array($result)){
  14.   $categories[$row['co']][] = array('kolor' => $row['kolor'], 'cena' => $row['cena']);
  15. }
  16.  
  17.   //print_r($categories); //do obejrzenia jak wygląda wygenerowana tablica
  18.  
  19. echo '<ul>';
  20. foreach ($categories as $idCat => $category){ //petla, która leci po kategoriach
  21. echo '<li>'.$category['co'].' (liczba produktow: '.count($category['products']).')<ul>';
  22. foreach ($category['products'] as $product){ //pętla, która leci po produktach w kategorii
  23.   echo '<li>Kolor: <b>'.$product['kolor'].'</b> </li><li>Cena: <b>'.$product['cena'].'</b></li>';
  24. }
  25. echo '</ul></li>';
  26. }
  27. echo '</ul>';
  28. ?>


Cytat
Warning: Invalid argument supplied for foreach() in D:\Server\httpd-users\eltom\funkcje.php on line 115


linia 115:
Cytat
foreach ($category['products'] as $product){
TrevorGryffits
Napisałem, żebyś zobaczył dokładnie jak wygląda tablica wygenerowana przy pomocy mojej pętli.
Reiven
tablica wygląda tak:

Kod
Array ( [Stopka damska z lurexem (5907513000105)] => Array ( [0] => Array ( [kolor] => beż [cena] => 10000 ) ) ) Array ( [Stopka damska z lurexem (5907513000105)] => Array ( [0] => Array ( [kolor] => beż [cena] => 10000 ) ) [Skarpetka męska klasyczna bezuciskowa (5907513000143)] => Array ( [0] => Array ( [kolor] => brąz [cena] => 10000 ) ) ) Array ( [Stopka damska z lurexem (5907513000105)] => Array ( [0] => Array ( [kolor] => beż [cena] => 10000 ) ) [Skarpetka męska klasyczna bezuciskowa (5907513000143)] => Array ( [0] => Array ( [kolor] => brąz [cena] => 10000 ) ) [Getry] => Array ( [0] => Array ( [kolor] => groszek [cena] => 10000 ) ) )
TrevorGryffits
Przecież teraz po wykonaniu zapytania nie ma żadnych podwójnych produktów. ALe już na wszelki wypadek (mam nadzieję, zę zadziała):
  1. echo '<ul>';
  2. foreach($categories as $name => $products){
  3. echo '<li>'.$name.' (liczba produktów: '.count($products)).')<ul>';
  4. foreach($products as $product){
  5. echo '<li>Kolor: <b>'.$product['kolor'].'</b></li><li>Cena: <b>'.$product['cena'].'</b></li>';
  6. }
  7. echo '</ul></li>';
  8. }
  9. echo '</ul>';

Wstaw to zamiast swojego tworzenia listy.
Reiven
dzięki smile.gif
poleciał pkt "Pomógł"
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.