Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Rozwiązany][PHP][MySQL] Mam Array, jak wyciągnąć resztę?, Grupowanie rekordów w zależności od kategorii
kasior
post
Post #1





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


Witajcie. Mam problem. Wiem,że rozwiązanie jest na pewno banalnie proste ale ja już 2 dzień siedzę nad tym i nie wiem co robię źle.

Jest sobie <select> który wyświetla drzewo kategorii i newsów w nich zawartych. Wygląda to teraz tak:



Jak widać zamiast pod każda z kategorii pokazać jej zawartość zapytanie pokazuje za każdym razem wszystkie artykuły ze wszystkich kategorii.
Kod php tej sekcji wygląda tak :

  1.  
  2. $sql= 'select id_category, category_pl from articles_categories where id_category != "1"';
  3. $stmt = $hDB->prepare($sql);
  4. $stmt->execute();
  5. $num = $stmt->rowCount();
  6.  
  7. if ($num>0){
  8. $art = $stmt->setFetchMode(PDO::FETCH_ASSOC);
  9. for ($i=0;$i<$num;$i++){
  10. $art = $stmt->fetch();
  11. $tmpart[] = $art;
  12. $cat_ids[$i] = $tmpart[$i]['id_category'];
  13.  
  14.  
  15. }
  16.  
  17. }


To wyciąga kategorie. Wynik tego zapytania:

  1. (
  2. [0] => 2
  3. [1] => 14
  4. [2] => 15
  5. [3] => 16
  6. [4] => 17
  7. [5] => 21
  8. [6] => 27
  9. [7] => 30
  10. [8] => 31
  11. [9] => 32
  12. [10] => 33
  13. [11] => 34
  14. [12] => 35
  15. [13] => 36
  16. [14] => 37
  17. )
  18.  


Następnie zrobiłem takie coś:

  1. foreach ($cat_ids as $cat) {
  2.  
  3.  
  4. $sql= 'select id, id_category, subject_pl from articles where id_category = :id_categ order by add_date desc';
  5. $stmt = $hDB->prepare($sql);
  6. $stmt->bindParam(':id_categ',$cat,PDO::PARAM_INT);
  7. $stmt->execute();
  8. $num = $stmt->rowCount();
  9.  
  10. if ($num>0){
  11. $arty = $stmt->setFetchMode(PDO::FETCH_ASSOC);
  12. for ($i=0;$i<$num;$i++){
  13. $arty = $stmt->fetch();
  14. $tmparty[] = $arty;
  15.  
  16. }
  17. }
  18. }
  19.  
  20.  
  21. $smarty->assign('tmpart',$tmpart);
  22. $smarty->assign('tmparty',$tmparty);


Kod html wygląda tak:

  1. <option value="0" style="font-weight:bold">&nbsp;&nbsp;<b>Kategorie artykułów</b></option>
  2. {section start=0 step=1 name=tmpart loop=$tmpart}
  3. <option value="akt:{$tmpart[tmpart].id_category}:1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└ {$tmpart[tmpart].category_pl|stripslashes}</option>
  4.  
  5. {section start=0 step=1 name=arty loop=$tmparty}
  6. <option value="akt:{$tmparty[arty].id_category},{$tmparty[arty].id}" style="color:#0066CC">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└ {$tmparty[arty].subject_pl|stripslashes}</option>
  7. {/section}
  8.  
  9. {/section}


Możecie mi wytknąć co robię nie tak??

Ten post edytował kasior 12.01.2010, 23:29:45


--------------------
Zapraszam do odwiedzenia mojej strony.
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Pisalem arta o identycznym problemie:
http://nospor.pl/grupowanie-wynikow-n35.html
moze ci sie przyda


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kasior
post
Post #3





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


Może nie pomogło. Jakoś nie mogę tego zastosować do mojego kodu i smarty. A kombinuję jak koń pod górę smile.gif


--------------------
Zapraszam do odwiedzenia mojej strony.
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Kod co tam podalem tworzy tablice na podstawie danych a nastepnie wyswietla info na podstawie tej tablicy.
Tablica generowana jest z identycznej struktury co u ciebie wiec nie wiem w czy masz problem.
A jak juz bedziesz mial tablice to potem na spokojnie wstawisz ją do smarty.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kasior
post
Post #5





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


Proszę bardzo. Tak wygląda kod po tym co mi dałeś. Nie wyświetla produktów niestety tylko kategorie.

  1.  
  2. $sql= 'select c.id_category, c.category_pl, a.id, a.id_category, a.subject_pl from articles_categories c left join articles a on a.id_category = c.id_category and c.id_category != "1" order by add_date desc';
  3. $stmt = $hDB->prepare($sql);
  4. $stmt->execute();
  5. $num = $stmt->rowCount();
  6.  
  7. if ($num>0){
  8. $art = $stmt->setFetchMode(PDO::FETCH_ASSOC);
  9. for ($i=0;$i<$num;$i++){
  10. $art = $stmt->fetch();
  11. $tmpart[] = $art;
  12. }
  13.  
  14. }
  15.  
  16.  
  17. echo '<select>';
  18. foreach ($tmpart as $id_category => $category){ //petla, która leci po kategoriach
  19. echo '<option>'.$category['category_pl'].'</option>';
  20. //$smarty->assign('tmpart',$category);
  21.  
  22.  
  23. foreach ($category['subject_pl'] as $product){ //pętla, która leci po produktach w kategorii
  24. echo '<option> ------------- <b>'.$product['subject_pl'].'</b></option>';
  25. //$smarty->assign('tmparty',$product);
  26.  
  27. }
  28.  
  29. }
  30. echo '</select>';


Tego selecta zrobiłem po to,zeby coś widzieć. Zmienne smarty na razie zahaszowane.


--------------------
Zapraszam do odwiedzenia mojej strony.
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




po pierwsze: sortuję po kategorii, dopiero potem po czyms innym
po drugie: nie masz wogole kodu, ktory buduje tablicę, wiec nie wiem jakim prawem ma ci to dzialac winksmiley.jpg


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kasior
post
Post #7





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


Ok. Wykminiłem. Może komuś się przyda.

  1. $sql= 'select id_category, category_pl from articles_categories where id_category != "1"';
  2. $stmt = $hDB->prepare($sql);
  3. $stmt->execute();
  4. $num = $stmt->rowCount();
  5.  
  6.  
  7. if ($num>0){
  8. $art = $stmt->setFetchMode(PDO::FETCH_ASSOC);
  9. for ($i=0;$i<$num;$i++){
  10. $art = $stmt->fetch();
  11. $tmpart[] = $art;
  12. $cat_ids[$i] = $tmpart[$i]['id_category'];
  13.  
  14. }
  15. }
  16.  
  17. foreach ($cat_ids as $cat) {
  18.  
  19. $sql= 'select id, id_category, subject_pl from articles where id_category = :id_categ order by add_date desc';
  20. $stmt = $hDB->prepare($sql);
  21. $stmt->bindParam(':id_categ',$cat,PDO::PARAM_INT);
  22. $stmt->execute();
  23. $num = $stmt->rowCount();
  24.  
  25. if ($num>0){
  26. $arty = $stmt->setFetchMode(PDO::FETCH_ASSOC);
  27. for ($i=0;$i<$num;$i++){
  28. $arty = $stmt->fetch();
  29. $tmparty[$arty['id_category']][] = $arty;
  30. }
  31.  
  32. }
  33.  
  34. }
  35. $smarty->assign('tmpart',$tmpart);
  36. $smarty->assign('tmparty',$tmparty);
  37.  
  38. $stmt->closeCursor();


I templatka :

  1. <option value="0" style="font-weight:bold">  Kategorie artykułów</option>
  2. {assign var=idc value=$tmpgal[tmppag].id_category}
  3. {section start=0 step=1 name=tmpart loop=$tmpart}
  4. <option value="akt:{$tmpart[tmpart].id_category}:1">       ? {$tmpart[tmpart].category_pl|stripslashes}</option>
  5. {assign var=idc value=$tmpart[tmpart].id_category}
  6. {section start=0 step=1 name=arty loop=$tmparty[$idc]}
  7. <option value="akt:{$tmparty[$idc][arty].id_category},{$tmparty[$idc][arty].id}" style="color:#0066CC">              ? {$tmparty[$idc][arty].subject_pl|stripslashes}</option>
  8. {/section}
  9. {/section}


Ten post edytował kasior 12.01.2010, 23:28:23


--------------------
Zapraszam do odwiedzenia mojej strony.
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Wykminiłem.
Zrobiłeś to w najgorszy z możliwych sposobów: zapytania lecą u Ciebie w pętli. Optymalne jak cholera winksmiley.jpg
Cytat
Może komuś się przyda.
Mam nadzieję że nie.

Nie wiem czemu nie zastosujesz tego co ci podałem? Bo u mnie jest na czystym mysql_ a u Ciebie na PDO? No przecież musisz tylko zamienić pobieranie rekordów na PDO.
A wiem, że umiesz robić pobieranie rekordów na PDO bo Twoje kody powyżej o tym świadczą.
Powód edycji: [nospor]:


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kasior
post
Post #9





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


Zrobić sobie tablicę po twojemu to nie problem. Problem jest potem, kiedy trzeba to wywalić do Smarty. Najwięcej czasu zajęło szukanie sposobu właśnie na to.
Masz pomysł to pokaż. Zależy mi na tym, żeby to optymalnie chodziło.

Ten post edytował kasior 13.01.2010, 14:27:30


--------------------
Zapraszam do odwiedzenia mojej strony.
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




całą tablicę przypisujesz do smarty poprzez assign_by_ref a następnie w smarty przelatujesz po niej analogicznie jak ja to robilem w czystym php.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kasior
post
Post #11





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Bydgoszcz

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


No ok. Popróbuję. Thx Nospor za porady winksmiley.jpg Guziczek na "P" poleciał winksmiley.jpg


--------------------
Zapraszam do odwiedzenia mojej strony.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 02:38