Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Wyświetlenie wielu rekordów z kilku tabel
Przemo75
post
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 2
Dołączył: 9.03.2004
Skąd: POLSKA

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


Witam,
Mam problem z wyświetleniem wielu danych z dwóch tabel. Jednej kategorii z tabeli KATEGORIA odpowiada kilka(naście) produktów z tabeli ASORTYMENT.
Problem polega na tym, że w tej chwili wyniki wyświetlane są w sposób:
Kategoria1
Nazwa1
Opis1
Produkt1

Kategoria1
Nazwa1
Opis1
Produkt2

... itd.

a chciałbym osiągnąć wynik:

Kategoria1
Nazwa1
Opis1
Produkt1
Produkt2
Produkt3

itd.

  1. <?php
  2. include("connections/baza_pass.php");
  3. $sql = "SELECT * FROM kategoria ORDER BY id_kategorii ASC";
  4.  
  5. $numresults=mysql_query($sql, $link);
  6. $numrows=mysql_num_rows($numresults);
  7.  
  8. if($numrows>0){
  9.  
  10. echo '<form action="" method="post">';
  11. echo '<select name="kategoria" onChange="this.form.submit()">';
  12. echo '<option value="">Wybierz kategorię:</option>';
  13. while($wybor = mysql_fetch_array($numresults))
  14. {
  15. $id_kategorii = $wybor["id_kategorii"];
  16. $nazwa = $wybor["nazwa"];
  17. $opis = $wybor["opis"];
  18.  
  19. echo '<option value="'.$id_kategorii.'">'.$nazwa.'</option>';
  20. }
  21. echo '</select>';
  22. echo '</form>';
  23. }
  24. else
  25. {
  26. echo 'Brak wyników';
  27. }
  28.  
  29.  
  30. @$kategoria = $_POST['kategoria']; // ten warunek musi byc zawsze
  31.  
  32. if ($kategoria)
  33. {
  34.  
  35. echo "<br>\n";
  36. $link=mysql_query("SELECT * FROM kategoria as k, asortyment as a WHERE k.id_kategorii=a.id_kategorii AND a.id_kategorii='$kategoria'");
  37. while($wybor2=mysql_fetch_array($link))
  38. {
  39. $id_kategorii = $wybor2["id_kategorii"];
  40. $nazwa = $wybor2["nazwa"];
  41. $opis = $wybor2["opis"];
  42. $produkt = $wybor2["produkt"];
  43.  
  44. echo "<br>\n";
  45. echo '<p class="text">Nazwa kategorii: <b>'. $nazwa .'</b></p>';
  46. echo '<p class="text">Opis kategorii:</p>';
  47. echo '<p class="text"><b>'. $opis .'</b></p>';
  48. echo '<p class="text">Produkty:</p>';
  49. echo '<p class="text"><b>'. $produkt .'</b></p>';
  50. echo "<br>\n";
  51. }
  52. }
  53. ?>

Zapewne trzeba użyć warunku IF ale nie mam pojęcia w jaki sposób.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Przemo75
post
Post #2





Grupa: Zarejestrowani
Postów: 66
Pomógł: 2
Dołączył: 9.03.2004
Skąd: POLSKA

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


@nospor
Wielkie dzięki za ogromne wsparcie (linkiem). Początkowo myślałem, że nie dam rady tego przerobić na swoje potrzeby ale na (moje) szczęście się udało.

Poniżej poprawiony kod (może nie wygląda najlepiej ale cóż).

  1. @$kategoria = $_POST['kategoria'];
  2.  
  3. if ($kategoria)
  4. {
  5. $link=mysql_query(" SELECT GROUP_CONCAT(a.produkt ORDER BY a.id_asort ASC SEPARATOR ';;;') PRODUCTS, k.id_kategorii kid, k.nazwa knazwa, k.opis kopis FROM kategoria k LEFT JOIN asortyment a ON a.id_kategorii = k.id_kategorii WHERE k.id_kategorii='$kategoria' GROUP BY a.id_kategorii ORDER BY a.id_asort ASC ");
  6.  
  7. $categories = array();
  8. while ($wybor2 = mysql_fetch_array($link)){
  9. $kid = $wybor2['kid'];
  10.  
  11. $categories[$kid] = array('nazwa' => $wybor2['knazwa'], 'opis' => $wybor2['kopis'], 'products' => array());
  12.  
  13. if (!empty($wybor2['PRODUCTS']))
  14. {
  15. $products = explode(';;;',$wybor2['PRODUCTS']);
  16. foreach ($products as $produkt){
  17. $categories[$kid]['products'][] = $produkt;
  18. }
  19. }
  20. }
  21.  
  22. echo '<br><ul>';
  23. foreach ($categories as $idCat => $category)
  24. {
  25. echo '<li><b>'.$category['nazwa'].'</b><br><br>';
  26. echo '<li>'.$category['opis'].'<ul><br>';
  27. foreach ($category['products'] as $produkt)
  28. {
  29. echo '<li>'.$produkt.'</li>';
  30. }
  31. echo '</ul></li>';
  32. }
  33. echo '</ul>';
  34.  
  35. }


Jeszcze jedno pytanie. W jaki sposób trzeba zmodyfikować kod, aby uzyskać nr id (a.id_asort) dla każdego otrzymanego produktu?

Ten post edytował Przemo75 6.07.2011, 14:05:04
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: 3.10.2025 - 18:32