Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Segregacja danych z mysql
Forum PHP.pl > Forum > Przedszkole
charlie-cherry
Witam.

Mam taki problem - pobieram z bazy danych wpisy dotyczącego danego tytuły gry (który wpisuję w wyszukiwarce). Dostaję kilka wpisów, jednakże chcę je posegregować na "tipsy i kody" oraz "solucje" - dodam, że w bazie danych każdy wpis ma już dopisaną odpowiednią kategorię w dodatkowym polu.
Mam taki kod:

Kod
  
   <b>$test = trim($_GET['tytulgry']);
    mysql_connect(localhost, xxxx, xxxx) or die(mysql_error());
    mysql_select_db("wilq") or die(mysql_error());
    mysql_query('SET CHARACTER SET utf8');
    mysql_query('SET NAMES utf8');
    $query = "select * from tnt where tytul='$test';";
    $result = mysql_query($query);
    $num_result = mysql_num_rows($result);
       if (!($test)) { echo 'Nie wpisałeś tytułu gry!';}
    elseif ($num_result == 0)
    {echo "<p>Niestety, nie ma takiej gry w bazie danych.
    Możesz spróbować wyszukać raz jeszcze.
    Upewnij się, że wspisałeś poprawny tytuł gry.</p>";}
    else { echo "<h6>Liczba znalezionych wpisów: $num_result </h6>";}
          
   while ( $rekord = mysql_fetch_assoc ($result)) {
   $numer = $rekord['numer'];
   $tytul = stripslashes($rekord['tytul']);
   $rodzaj = stripslashes($rekord['rodzaj']);
   $komputer = ucwords($rekord['komputer']);
   $tresc= stripslashes($rekord['tresc']);
   $autor = stripslashes($rekord['autor']);
   $zrodlo = stripslashes($rekord['zrodlo']);
  
  
   if ($rodzaj == "solucja") {echo "Solucje <br> ";
     echo "<strong>$tytul</strong>"." - "."$komputer"."<br> ";
     echo '<h6 class="extra">'.$autor.", "."$zrodlo".'</h6>';
     echo nl2br($tresc)."<br> ";}
   else { echo "Tipsy i Kody <br> ";
     echo "<strong>$tytul</strong>"." - "."$komputer"."<br> ";
     echo '<h6 class="extra">'.$autor.", "."$zrodlo".'</h6>';
     echo nl2br($tresc)."<br> ";}
   }


Nie wiem jak zrobić aby tekst "Tipsy i kody" oraz "Solucje" pojawiały się tylko raz, niezależnie od liczby rekordów (chyba, że jest ich zero, wtedy nie powinny się pojawiać w ogóle). Czyli jak sprawić, aby ta linijka kodu wykonała się tylko raz, a reszta do oporu.

Wiem, że teoretycznie mógłbym zrobić dwa zapytania do bazy danych, każde z innym "where", ale chyba musi być jakiś inny, prostszy sposób?
arecki
Na szybko możesz zrobić "ORDER BY rodzaj" w zapytaniu SQL'owym no i stworzyć zmienną w której będziesz trzymał ostatnio wyświetlony rodzaj. W każdej pętli sprawdzasz czy aktualny rodzaj jest taki sam z poprzednim. Jeżeli tak - to nie wyświetlasz go. Jeżeli nie - to wyświetlasz go przed rekordem i zastępujesz w zmiennej tymczasowej ostatni rodzaj. Proste ? smile.gif
charlie-cherry
Pomysł dobry, ale nie wiem jak go wykonać w praktyce. Można prosić o pomoc?
arecki
Oj ludzie... to coś pomiędzy uszami należy do myślenia. Proszę. I żeby mi to było przed ostatni raz smile.gif

  1. <?php
  2. $query = "SELECT * FROM tnt WHERE tytul='$test' ORDER BY rodzaj";
  3.  
  4. $ostatniRodzaj = '';
  5.  
  6. while ($rekord = mysql_fetch_assoc ($result)) {
  7. $numer = $rekord['numer'];
  8. $tytul = stripslashes($rekord['tytul']);
  9. $rodzaj = stripslashes($rekord['rodzaj']);
  10. $komputer = ucwords($rekord['komputer']);
  11. $tresc= stripslashes($rekord['tresc']);
  12. $autor = stripslashes($rekord['autor']);
  13. $zrodlo = stripslashes($rekord['zrodlo']);
  14.  
  15. if(strcasecmp($ostatniRodzaj, $rodzaj) != 0) {
  16. echo '<h3>';
  17. switch ($rodzaj) {
  18. case 'solucja': echo 'Solucje'; break;
  19. case 'tipsy': echo 'Tipsy i Kody'; break;
  20. }
  21. echo '</h3>';
  22. $ostatniRodzaj = $rodzaj;
  23. }
  24. echo "<strong>$tytul</strong>"." - "."$komputer"."<br> ";
  25. echo '<h6 class="extra">'.$autor.", "."$zrodlo".'</h6>';
  26. echo nl2br($tresc)."<br> ";
  27. }
  28. ?>
charlie-cherry
Wielkie dzięki, dokładnie o to mi chodziło. Teraz tylko muszę zrozumieć jak to działa i dodac własne modyfikacje.
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.