Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Rekurencja - Wyświetlenie ostatnio napisanego Posta
Forum PHP.pl > Forum > Przedszkole
Weles
Witam!

Potrzebuję znaleźć najnowszy napisany post w danym dziale, biorąc pod uwagę wszystkie jego subdziały, więc mam:

Tabelę: "dzialy".
W niej Kolumny: "kategoria - w jakiej dział ma być kategorii, jeśli 0 tzn. że to subdział", "sub - jeśli 0 tzn. że to nie subdział".

Oraz:

Tabelę: "tematy".
W niej kolumny: "nazwa - nazwa tematu", "dzial - przypisany ID działu w którym jest temat", "ost_data - podana data kiedy był ostatni post tam pisany".

I udało mi się w pewnym stopniu wywołać najnowszy temat, lecz nie JEDEN, a najnowszy temat każdego z subdziałów danego działu,
Czyli jeśli dany dział "Dział1" który ma np. subdziały: "Abc","Def","Ghi","Jkl" to znajdzie mi najnowsze tematy każdego z nich, czyli nie jeden najnowszy w środku wszystkich, tylko:

Najnowszy temat 1 - "Działu1"
Najnowszy temat 2 - "Subdziału Abc"
Najnowszy temat 3 - "Subdziału Def"
Najnowszy temat 4 - "Subdziału Ghi"
Najnowszy temat 5 - "Subdziału Jkl"

A potrzebuję wyciągnąć tylko JEDEN najnowszy temat sprawdzając wszystkie z tych podkategorii.

Skrypt który napisałem i działał jak opisałem powyżej:

  1. function najnowszy_temat($id) {
  2. $krek1 = mysql_query("SELECT * FROM dzialy WHERE id='$id'");
  3. if(mysql_num_rows($krek1) > 0) {
  4. while($krek = mysql_fetch_array($krek1)) {
  5. $najnowszy_temat = mysql_fetch_array(mysql_query("SELECT nazwa, dzial, ost_data FROM tematy WHERE dzial='$id' ORDER BY ost_data DESC"));
  6. echo $najnowszy_temat['nazwa']; br();
  7. $subdzial = mysql_query("SELECT * FROM dzialy WHERE sub='$krek[id]'");
  8. if(mysql_num_rows($subdzial) > 0) {
  9. while($sub = mysql_fetch_array($subdzial)) {
  10. najnowszy_temat($sub['id']);
  11. }
  12. }
  13. }
  14. }
  15. }


Proszę o pomoc, męczę się z tym już od dłuższego czasu..
Uprzedzam z góry że nie chcę tworzyć nowej kolumny i dawać tam "IP", czyli np: "1.2.3".

Pozdrawiam!
nospor
Cytat
Uprzedzam z góry że nie chcę tworzyć nowej kolumny i dawać tam "IP", czyli np: "1.2.3".
A po co miałbyś to tworzyć?
W dziale tworzysz kolumne LAST_POST_ID i ją aktualizujesz zawsze gdy ktoś doda posta. Dzięki temu bez żadnego problemu i zbędnego mulenia masz to co chcesz.
Weles
@UP:
Tego też nie chcę :X
Chcę napisać forum w miarę optymalnie, czyli tak, że chodź bym usunął z bazy ręcznie dany temat, to wyświetli się jako najnowszy inny temat.
Dlatego interesuje mnie zrobienie tego z bazą danych w takim stanie w jakim jest, a tworząc tylko kod PHP który to dobrze odczyta.
Pozdrawiam.
nospor
Cytat
Chcę napisać forum w miarę optymalnie
Optymalnie jest tak jak ja mówię. To co ty chcesz zrobić jest dalekie od optymalności.
viking
Zresztą spójrz nawet w swój kod co robisz. Dla kolejnych danych z pierwszego zapytania, tworzysz kolejne selecty w pętli. Nie ma gorszego rozwiązania. Przejrzyj stronę http://www.depesz.com, dawno temu opublikował bardzo ciekawe wpisy do poruszania po strukturze drzewiastej.
Weles
Cytat(nospor @ 14.05.2012, 13:26:47 ) *
Optymalnie jest tak jak ja mówię. To co ty chcesz zrobić jest dalekie od optymalności.


Źle się wyraziłem, miałem napisać "Logicznie" a nie "Optymalnie".
A co do @UP, to ja dobrze wiem co robię, chodzi mi tylko o rozwiązanie i pokazałem mój przykładowy kod, próbowałem przypisywać zmienne do funkcji w funkcji, a potem jakoś posegregować daty i wywołać najnowszą nazwę ale też mi coś nie wychodziło.
nospor
Logicznie jest tak jak ja ci radzę. To co ty chcesz zrobić jest dalekie od logiczności. No ale Twoja sprawa.
Weles
nospor, ale sam pomyśl.
wejdziesz sobie w bazę robiąc tak jak mówisz, usuniesz ten wątek nie skryptem przez siebie przygotowanym tylko ręcznie - to na forum wyświetli nieistniejący wątek.

miałem tak właśnie od samego początku zrobić jak mówisz, no ale ten fakt mnie trochę wkurza.. zrobię jak mówisz skoro nie ma innego rozwiązania, bo cóż poradzę :f
nospor
To straszne...... ale takie jest życie. I dlatego dorabia sie funkcjonalnosc, która pozwala naprawić tę sytuację i nagle problem znika. I masz poprawnie i szybko działające forum a nie jakiegoś zamulacza, bo nie chce ci się posłuchać ciut bardziej doświadczonej osoby wink.gif

Poza tym tylko wysoce nieodpowiedzialny admin kasuje rekordy forum ręcznie...
Weles
  1. $zm1 = mysql_num_rows(mysql_query("SELECT id FROM tematy WHERE id='$id_z_pola_o_ktorym_mowisz'"));
  2. if($zm1 == 0) {
  3. ... inny id ...
  4. }


No wiem że mogę tak dorobić..
No zrobię tak, nie wiem czemu inny sposób by był nieoptymalny, no ale skoro twierdzisz że tak i że jesteś doświadczony to cię posłucham.
No.. dzięki za pomoc.
nospor
Cytat
nie wiem czemu inny sposób by był nieoptymalny
Ano temu, że zamiast 1 szybkiego zapytania byś musiał robić x zapytań.

ps: co ma robić kod co przedstawiłeś w poprzednim poście i czemu?
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.