Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyciąganie danych z bazy - problem z odpowiednim wyświetleniem wyników
Michael2318
post
Post #1





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


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?

Ten post edytował Michael2318 1.02.2013, 07:38:43
Go to the top of the page
+Quote Post
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


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





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


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. }


Ten post edytował Michael2318 1.02.2013, 14:20:15
Go to the top of the page
+Quote Post

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: 15.09.2025 - 10:42