Forum FAQForum FAQSearchSearch MemberlistMemberlist Forum ignore listForum ignore list RegisterRegister ProfileProfile Log in to check your private messagesLog in to check your private messages Log inLog in
problematičan sql upit

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    mi3dot.org Forum Index -> Server-side
View previous topic :: View next topic  
Author Message
gog



Joined: 18 Jun 2004
Posts: 679
Location: zagreb

PostPosted: 23.02.2005 12:02    Post subject: problematičan sql upit Add user to your forum ignore list Reply with quote

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

Code:
SELECT DISTINCT phpbb_posts.topic_id, phpbb_posts....... 


međuti, baza mi svjedno izbaci više redova sa istim poljem "phpbb_posts.topic_id". Ima li neki sql guru da pripomogne?
Back to top
View user's profile Send private message Visit poster's website
zytzagoo
mi3.crew


Joined: 25 Aug 2003
Posts: 1842
Location: Zagreb, Hrvatska

PostPosted: 23.02.2005 12:15    Post subject: Add user to your forum ignore list Reply with quote

Možes probati dodati:
Code:
GROUP BY phpbb_posts.topic_id

prije order by statementa, međutim, na većoj (jako velikoj) bazi taj query bi mogao potrajati.

Također, vodi računa o tome da ti ovaj upit može vratiti i neke topice koji su u private forumu recimo, ili sticky-e, ili guest spammere, itd.
Back to top
View user's profile Send private message Visit poster's website Twitter profile
gog



Joined: 18 Jun 2004
Posts: 679
Location: zagreb

PostPosted: 23.02.2005 14:43    Post subject: Add user to your forum ignore list Reply with quote

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...
Back to top
View user's profile Send private message Visit poster's website
zytzagoo
mi3.crew


Joined: 25 Aug 2003
Posts: 1842
Location: Zagreb, Hrvatska

PostPosted: 23.02.2005 14:58    Post subject: Add user to your forum ignore list Reply with quote

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...
Back to top
View user's profile Send private message Visit poster's website Twitter profile
gog



Joined: 18 Jun 2004
Posts: 679
Location: zagreb

PostPosted: 23.02.2005 15:07    Post subject: Add user to your forum ignore list Reply with quote

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 Twisted Evil 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...
Back to top
View user's profile Send private message Visit poster's website
zytzagoo
mi3.crew


Joined: 25 Aug 2003
Posts: 1842
Location: Zagreb, Hrvatska

PostPosted: 23.02.2005 15:13    Post subject: Add user to your forum ignore list Reply with quote

Probaj promijeniti ORDER BY u ovo:
Code:
ORDER BY phpbb_topics.topic_last_post_id DESC
Back to top
View user's profile Send private message Visit poster's website Twitter profile
njava
mi3.crew


Joined: 25 Aug 2003
Posts: 624
Location: Zagreb

PostPosted: 23.02.2005 16:43    Post subject: Add user to your forum ignore list Reply with quote

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
Back to top
View user's profile Send private message Visit poster's website
njava
mi3.crew


Joined: 25 Aug 2003
Posts: 624
Location: Zagreb

PostPosted: 23.02.2005 17:02    Post subject: Add user to your forum ignore list Reply with quote

Code:
SELECT
   p.topic_id,
   p.post_id,
   p.forum_id,
   p.poster_id,
   p.post_time,
   p.post_username,
   t.topic_title,
   t.topic_replies
FROM
   phpbb_posts p,
   phpbb_posts p2,
   phpbb_topics t,
   phpbb_forums f,
   phpbb_users u
WHERE
   p.post_id = t.topic_last_post_id AND
   p2.post_id = t.topic_first_post_id AND
   t.forum_id = f.forum_id AND
   p.poster_id = u.user_id
ORDER BY
   t.topic_last_post_id DESC
LIMIT
   10


eventualno jos mozes dodati i:

Code:
AND t.forum_id NOT IN ('forum_id', 'forum_id')

za neispisivanje postova pojedinih foruma

Code:
AND t.topic_status <> 1

ne ispisuj lockane topice

Code:
AND t.topic_status <> 2

ne ispisuj movane topice
Back to top
View user's profile Send private message Visit poster's website
gog



Joined: 18 Jun 2004
Posts: 679
Location: zagreb

PostPosted: 23.02.2005 17:07    Post subject: Add user to your forum ignore list Reply with quote

Genijalno, sada sve šljaka... tnx guys...
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    mi3dot.org Forum Index -> Server-side All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2005 phpBB Group