Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyciąganie danych z bazy - problem z odpowiednim wyświetleniem wyników
Forum PHP.pl > Forum > PHP
Michael2318
Mam w bazie takie tabele:

Categories:
|Category_id|category_title|category_title_link|category_posts|

category_posts:
|category_id|post_id|

oraz tabelę z postam, ale z niej wyciągam tylko tytuł postu, więc jest mało ważna.

Chcę osiągnać taki efekt, że na stronie głównej wyciągnę sobie nazwy wszystkich kategorii, a obok kazdej nazwy będzie przycisk 'rozwiń' i po rozwinięciu wyświetlą się nazwy wszystkich tematów, które należa do danej kategorii. Wymyśliłem sobie, że zrobię tablicę, gdzie $tablica[0] zwróci mi aktualną nazwę kategorii, a $tablica[1] zwróci mi wszystkie linki do wspiów. No i niby coś mam, ale skrypt pomija zawsze jeden wynik. Po prostu w pierwszej kategorii powinienem mieć 16 wpisów, a wyświetla mi 15, w drugiej powinienem mieć 2 wpisy, a wyświetla 1.

Tutaj jest kod:

  1. $sql = "SELECT p.post_title, p.post_id, cp.category_id, cp.post_id, c.category_id, c.category_title, c.category_title_link, c.category_posts
  2. FROM `categories` c
  3. LEFT JOIN `category_posts` cp
  4. ON cp.category_id = c.category_id
  5. LEFT JOIN `posts` p
  6. ON p.post_id = cp.post_id
  7. ORDER BY cp.category_id ASC";
  8. if ( !($result = Query($sql)) )
  9. {
  10. message_die_error(mysql_error(), __LINE__, __FILE__);
  11. }
  12.  
  13. $cat = 0;
  14. $num_cat = 0;
  15. $max_num_cat = 0;
  16. while($row = mysql_fetch_assoc($result))
  17. {
  18. if ( $cat == $row['category_id'] )
  19. {
  20. $link_cat .= '<a href="#">'.$row['post_title'].'</a><br>'."\n";
  21. $name_cat = '<a href="'.$row['category_title_link'].'-vc'.$row['category_id'].'.htm">'.$row['category_title'].'</a>';
  22. $category[$num_cat] = array(
  23. 0 => $num_cat.$name_cat,
  24. 1 => $link_cat
  25. );
  26. }
  27. else
  28. {
  29. $link_cat = '';
  30. $cat = $row['category_id'];
  31. $num_cat = $num_cat+1;
  32. }
  33.  
  34. if ( $num_cat > $max_num_cat )
  35. {
  36. $max_num_cat = $num_cat;
  37. }
  38. }
  39. echo $category[1][0].'<br> >> '.$category[1][1].'<br><br><br>'.$category[2][0].'<br> >> '.$category[2][1];


Od razu mówię, że wiem czemu tak się dzieje - przy przejściu w pętli z jednego ID kategorii na drugie, pierwszy 'przelot' przez pętlę jest jakby pusty bo nie zapisuje żadnych danych, tylko aktualizuje zmienne warunkowe. Kolejny przelot już wszystko załapuje.
Chciałbym aby ktoś mi pomógł to poprawić tak, aby zapisywało wszystkie wpisy.

EDIT:

Albo inaczej - czy w PHP jest jakaś funkcja, typu repeat(), która potwórzy przelot przez pętlę? Znalazłem w necie coś takiego jak repeat ale z tego co czytam to to tylko delphia obsługuje. Czy w PHP nie ma alternatywy dla tej funkcji?
CuteOne
  1. $array = array();
  2.  
  3. while($row = mysql_fetch_assoc($result))
  4. {
  5. $array[$row['category_id']][] = $row['post_title'];
  6. }
  7.  
  8. print_r($array);
Michael2318
No w sumie mniej więcej o taki efekt mi chodziło tylko chciałbym jeszcze dodać do tej tablicy to co wyżej podałem, czyli
$array[0] - nazwa danej kategorii,
$array[1] - wszystkie wpisy z tej kategorii.

EDIT:

Dobra, poradziłem sobie:

  1. $array = array();
  2. $cat = 0;
  3. $licz = 0;
  4. while($row = mysql_fetch_assoc($result))
  5. {
  6. if ( $cat == $row['category_id'] )
  7. {
  8. $array[$licz][0] = $row['category_title'];
  9. $array[$licz][1] .= $row['post_title'].'<br>'."\n";
  10. }
  11. else
  12. {
  13. $cat = $row['category_id'];
  14. $licz = $licz+1;
  15. $array[$licz][0] = $row['category_title'];
  16. $array[$licz][1] .= $row['post_title'].'<br>'."\n";
  17. }
  18. }
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.