Posted: 23.02.2005 12:02 Post subject: problematičan sql upit
Igram se malo sa phpbb-om i pokušavajući izvući zadnjih 10 postova na forumuj došao sam do slijedećeg upita:
Code:
SELECT phpbb_posts.topic_id, phpbb_posts.post_id, phpbb_posts.forum_id, phpbb_posts.poster_id, phpbb_posts.post_time, phpbb_posts.post_username, phpbb_topics.topic_title, phpbb_topics.topic_replies
FROM phpbb_posts, phpbb_topics, phpbb_forums, phpbb_users
WHERE phpbb_posts.topic_id = phpbb_topics.topic_id
AND phpbb_posts.forum_id = phpbb_forums.forum_id
AND phpbb_posts.poster_id = phpbb_users.user_id
ORDER BY phpbb_posts.post_time DESC
LIMIT 10
koji mi izbaci sve potrebne podatke da ispišem zadnjih 10 postova na forumu skupa sa svim relevantnim informacijama, problem je u tome što ukoliko je među zadnjih 10 postova, 2 ili više iz iste teme ona će biti 2 ili više puta ispisana, a to naravno želim izbjeći, pokušao sam dodati distinct na početui...
Baš idem probati, ovo za privatne dijelove foruma mi je jasno, a da bi se moglo postati morat će se registrirati. Ukoliko sve ovo natjeram da radi, kada zatreba (ako zatreba) neće biti problem provjeriti da li je forum privatnog tipa ili ne...
Isto tako mi je jasno i da je query poprilično velik, no ne vidim jednostavnije riješenje, ti? Osim da idem raditi cron job koji će pokretati skriptu svakih par minuta i popuniti neku datoteku ili tabicu koju ću onda samo inkludati u site, no to mi se baš i ne sviša kao ideja zbog lag time-a...
Joined: 25 Aug 2003 Posts: 1842 Location: Zagreb, Hrvatska
Posted: 23.02.2005 14:58 Post subject:
Da, u principu nema nekog jednostavnijeg rješenja. Indexi su po defaultu u phpbb-u dobro postavljeni, i ovaj query ih koristi optimalno koliko je moguće.
Možda bi mogao limitirati upit dodatno da ti vrati samo postove u zadnjih 5 ili 7 dana (ili manje, ovisno koliko je posjećen forum), ali onda bi vjerojatno trebalo dodati index na phpbb_posts.post_time polje, i vidjeti kako se stvar ponaša... A možda ni to ne pomogne puno...
Zbog layouta stranice želim da bude fiksni broj postova koje će vraćati.
No problem još uvijek nisam riješio, dodavanjem GROUP BY phpbb_posts.topic_id se riješio početni problem, no nastao je novi Sada vrati samo jedan zapis iz određene teme, no to više nije najnoviji, nego najstariji od svih koji se prikažu kada ne koristim GROUP BY...
ako okines group by, onda ti order by nece puno pomoci, jer se recordset prvo groupa a onda ordera. ovaj problem nije rijedak, malo procackam pa ti javim mogucnosti
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum