Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Rekurencja - Wyświetlenie ostatnio napisanego Posta
Weles
post 14.05.2012, 12:00:18
Post #1





Grupa: Zarejestrowani
Postów: 213
Pomógł: 0
Dołączył: 7.07.2011

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


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!
Go to the top of the page
+Quote Post
nospor
post 14.05.2012, 12:17:12
Post #2





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




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.
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
Weles
post 14.05.2012, 12:20:26
Post #3





Grupa: Zarejestrowani
Postów: 213
Pomógł: 0
Dołączył: 7.07.2011

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


@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.
Go to the top of the page
+Quote Post
nospor
post 14.05.2012, 12:26:47
Post #4





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




Cytat
Chcę napisać forum w miarę optymalnie
Optymalnie jest tak jak ja mówię. To co ty chcesz zrobić jest dalekie od optymalności.


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

"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
viking
post 14.05.2012, 12:33:32
Post #5





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


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.


--------------------
Go to the top of the page
+Quote Post
Weles
post 14.05.2012, 12:41:06
Post #6





Grupa: Zarejestrowani
Postów: 213
Pomógł: 0
Dołączył: 7.07.2011

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


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.

Ten post edytował Weles 14.05.2012, 12:42:23
Go to the top of the page
+Quote Post
nospor
post 14.05.2012, 12:42:33
Post #7





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




Logicznie jest tak jak ja ci radzę. To co ty chcesz zrobić jest dalekie od logiczności. No ale Twoja sprawa.


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

"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
Weles
post 14.05.2012, 12:44:39
Post #8





Grupa: Zarejestrowani
Postów: 213
Pomógł: 0
Dołączył: 7.07.2011

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


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

Ten post edytował Weles 14.05.2012, 12:46:30
Go to the top of the page
+Quote Post
nospor
post 14.05.2012, 12:47:12
Post #9





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




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


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

"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
Weles
post 14.05.2012, 12:50:38
Post #10





Grupa: Zarejestrowani
Postów: 213
Pomógł: 0
Dołączył: 7.07.2011

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


  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.
Go to the top of the page
+Quote Post
nospor
post 14.05.2012, 12:57:21
Post #11





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




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?


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

"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

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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 08:45