Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> lista kategorii z ost. postem
karis
post
Post #1





Grupa: Zarejestrowani
Postów: 217
Pomógł: 2
Dołączył: 23.12.2008

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


musze naprawic listowanie kategorii na forum wraz z ostatnim tematem i ostatnim postem w nim

struktura tabel (kluczy do relacji) jest następująca:

categories:

id

topics:

id, category_id, created int(6) - zapisywany unixtimestamp

posts:

id, topic_id, `date` int (9) - tez unixtimestamp

musze pobrac:

liste kategorii wraz z ostatnią odpowiedzią w temacie (pobrać tu musze też nazwe tematu, autora tematu, autora ostatniej odpowiedzi)

potrzebuje to zrobic jak najwydajniej najlepiej jednym zaytaniem z joinami albo subselectami, prosze o porady bo juz sie mecze z tym 3 dni
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
nospor
post
Post #2





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




Najlepiej jakbys poprawil strukture i w tabeli kategorii dodal ID ostatniego tematu
a w tabeli tematu dodal ID ostatniego posta. Wowczas wszystko zrobisz i wydajnie i bez problemu
Go to the top of the page
+Quote Post
karis
post
Post #3





Grupa: Zarejestrowani
Postów: 217
Pomógł: 2
Dołączył: 23.12.2008

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


no moglbym tylko teraz zabawa z triggerami bedzie ładna, a przy obecnej strukturze? jakieś wskazówki?
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




Ale to bedzie najoptymalniejsze.

trigger albo w php
Go to the top of the page
+Quote Post
karis
post
Post #5





Grupa: Zarejestrowani
Postów: 217
Pomógł: 2
Dołączył: 23.12.2008

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


triggery chyba odpadają w tej sytuacji bo dojdzie do rekurencji, kiedy przy AFTER UPDATE posts wykonam zapytanie update do post
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 update post masz robic update topic
po update topic masz robic update category

ps: widze ze nie masz tabeli tematow (topic)....... no wlasnie.... przydalaby sie (IMG:style_emoticons/default/wink.gif)

ALbo czysty php, gdzie w php robisz update na tabelach w zaleznosci od akcji
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #7





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Cytat(karis @ 12.11.2013, 14:39:40 ) *
triggery chyba odpadają w tej sytuacji bo dojdzie do rekurencji, kiedy przy AFTER UPDATE posts wykonam zapytanie update do post

Jeśli byś tak chciałbyś robić, to nie robisz UPDATE, tylko modyfikujesz NEW. I BEFORE, a nie AFTER.
Go to the top of the page
+Quote Post
karis
post
Post #8





Grupa: Zarejestrowani
Postów: 217
Pomógł: 2
Dołączył: 23.12.2008

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


tak tylko co jesli chce kompleksowo wszystkie zaktyalizowac a nie tylko jeden?

poradzilem sobie na razie, że do innej tabeli przypisalem triggera
Go to the top of the page
+Quote Post
nospor
post
Post #9





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




Cytat
tak tylko co jesli chce kompleksowo wszystkie zaktyalizowac a nie tylko jeden?

Przyklad dla topic - post
update topic t set ID_LAST_POST = (select ID from post where ID_TOPIC=t.ID order by CDATE desc limit 1);
Go to the top of the page
+Quote Post
karis
post
Post #10





Grupa: Zarejestrowani
Postów: 217
Pomógł: 2
Dołączył: 23.12.2008

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


o triggery mam póki co załatwione teraz czeka mnie koszmar z przepisywaniem zapytania i struktury:

  1. SELECT *, count(comment_id) AS posts FROM (
  2. SELECT
  3. p.id AS sub_id, p.name AS sub_name, p.description AS sub_description, p.news_count AS sub_count, p.parent_id AS sub_parent_id,
  4. s.id, s.name, s.description,
  5. n.id AS news_id, n.title AS news_title, n.category_id AS ncat, s.position AS s_pos, p.position AS p_pos,
  6. c.id AS comment_id,
  7. IF(c.date IS NULL, FROM_UNIXTIME(n.created), IF(n.created > c.date, FROM_UNIXTIME(n.created), FROM_UNIXTIME(c.date))) AS topic_date,
  8. IF(c.author IS NULL, n.author, c.author) AS topic_author,
  9. IF(c.user_id IS NULL, n.user_id, c.user_id) AS topic_user_id
  10. FROM news_categories p
  11. INNER JOIN news_categories s ON p.parent_id = s.id
  12. LEFT JOIN news n ON (n.category_id = p.id AND n.active = 1)
  13. LEFT JOIN news_comments c ON (n.id = c.news_id AND c.active = 1)
  14. ORDER BY topic_date DESC
  15. ) AS tmp GROUP BY sub_id ORDER BY s_pos, p_pos


całość opiera się na newsach i komentarzach (jako forum) tutaj pobierane są kategorie wraz z subkategoriami i tematami i pozostalymi danymi

macie jakieś pomysły jak to przerobić? potem jest to dziwnie parsowane na tablicach w php
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #11





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Kolejny, który do GROUP BY * używa...
Może napisać manuala pt. "Jak NIE grupować w MySQL-u?"
Go to the top of the page
+Quote Post
karis
post
Post #12





Grupa: Zarejestrowani
Postów: 217
Pomógł: 2
Dołączył: 23.12.2008

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


po pierwsze to nie ja pisałem a skoro jesteś takim mądralą to zabłyśnij i napisz jak powinno wygladac to zapytanie
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #13





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


1. TY jesteś autorem tego posta. Nawet jeśli skądś to wkleiłeś, to nie napisałeś ską - nie mogłem wiedzieć że nie ty jesteś autorem.
2. Mógłbym napisać - dla mnie to nie problem. (popatrz sobie na inne moje posty na tym forum). Ale musiałbym wiedzieć, co to ma robić. Analizując samego SQL mogę się domyśleć, co to robi, ale nie co MA robić.
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: 25.08.2025 - 01:28