[ Boyce @ 28.06.2005. 21:23 ] @
Pokusavam da napravim mini forum i imam sledece tabele:

Code:

groups
------
id INT (AUTOINC/Index)
name CHAR

topics
------
id INT (AUTOINC/Index)
post_date DATETIME
group_id INT -----> vezuje se na id iz groups tabele
title CHAR

posts
-----
id INT (AUTOINC/Index)
topic_id INT ----------> vezuje se na id iz topics tabele
first_post TINYINT ----------> ako je 1 , to je onda pocetni post u topicu
text VARCHAR


ono sto me muci je sledece:

Zeleo bih da prikazem spisak grupa u tebeli, u sledecem formatu:

Code:

ime_grupe.......zadnji post u grupi i ime topica.......ukupno topica u grupi......ukupno postova u grupi


Primer:
Code:

PHP Forum......June 28 2005, pomoc oko skripte...........24...........253
MySQL Forum....June 27 2005, instalacija.................33...........367


Pokusavao sam razne stvari i sve sto sam postigao je da dobijem ime grupe, i broj postova unutar nje.

Hvala na svakoj pomoci
[ Dejan Topalovic @ 29.06.2005. 21:03 ] @
Nisam testirao da li bi bilo optimalnije razdvojiti sve na vise upita ili da se sve odvija u jednom upitu, pa cu to prepustiti tebi, ako imas volje i zivaca... Meni se nije dalo. :)

Dakle, uradio sam malu perverziju od SQL-a i dobio sam ovaj rezultat:

SELECT sub2.naziv_grupe "Naziv Grupe", sub2.datum_slanja "Datum slanja", sub2.naziv_teme "Naziv teme", sub3.broj_tema "Broj tema u grupi", sub1.broj_poruka "Broj poruka u grupi"
FROM
(
SELECT g.id gid, COUNT(*) broj_poruka
FROM posts, groups g, topics t
WHERE g.id = t.group_id AND t.id = posts.topic_id GROUP BY

g.id
) AS sub1

,
(
SELECT g.id gid, g.name AS naziv_grupe, t.title AS naziv_teme, t.post_date AS datum_slanja
FROM topics t, groups g
WHERE
g.id = t.group_id
AND
t.id =
(SELECT id AS topic_id
FROM topics
WHERE topics.group_id = t.group_id
ORDER BY post_date DESC
LIMIT 1)

) AS sub2
,

(
SELECT group_id, COUNT(*) broj_tema
FROM topics
GROUP BY group_id
) AS sub3

WHERE
sub1.gid = sub2.gid
AND sub3.group_id = sub2.gid
;


+-------------+---------------------+------------+-------------------+---------------------+
| Naziv Grupe | Datum slanja | Naziv teme | Broj tema u grupi | Broj poruka u grupi |
+-------------+---------------------+------------+-------------------+---------------------+
| Grupa 1 | 2005-06-29 02:51:21 | Topic 1 | 1 | 3 |
| Grupa 2 | 2005-06-29 02:51:20 | Topic 2 | 2 | 8 |
| Grupa 3 | 2005-06-29 04:30:58 | Topic 4 | 3 | 5 |
| Grupa 4 | 2005-06-29 04:31:39 | Topic 8 | 4 | 7 |
| Grupa 5 | 2005-06-29 02:51:11 | Topic 11 | 5 | 7 |
+-------------+---------------------+------------+-------------------+---------------------+
5 rows in set (0.02 sec)


Malo sam pokusao source kod uciniti preglednijim, pa sam razdvojio bojama, ali nisam njima nijedan dio posebno naglasavao.

Isprobaj, pa javi da li je to sta tebi treba...

Naravno, pozivam sve poznavaoce SQL-a da pokusaju naci neko optimalnije rjesenje, kako bismo svi naucili nesto korisno. :)

Evo, naknadno sam dodao i SQL file da mozete i vi sebi kreirati potrebne tabele za testiranje.

[Ovu poruku je menjao StRiPy dana 29.06.2005. u 22:08 GMT+1]
[ Boyce @ 30.06.2005. 14:25 ] @
Hvala na odgovoru, ali nazalost ima problema :(

Kada startujem tvoj primer (kao i moj), uvek dobijem samo 1 red (imam v4.1 mysql), ali ono sto je jos gore, necu moci na serveru da koristim ni v4.1 (koja podrzava pod-upita) zato sto oni koriste 4.0.x :(

Mozda moze nesto da se uradi uz pomoc neke "teske" join komande?

Ako je nemoguce, mozda onda da napravim ta polja (poslednji topic, broj topica...) i onda ih rucno menjam nakon dodavanja novog topic-a, brisanja topic-a i sl. Ali mi se to nazalost cini kao losa ideja :(

pozdrav i hvala na svakoj pomoci
[ Dejan Topalovic @ 30.06.2005. 14:47 ] @
Ako na hostingu ne mozes koristiti pod-upite, onda ces morati pokusati razbiti ovo u vise pojedinacnih upita ili da eksperimentises sa JOIN-ima.

Kako to da ti vraca samo jedan red? Koliko redova imas uopste u tabelama?
[ Boyce @ 30.06.2005. 14:59 ] @


Nazalost na pocetku sam sa JOIN komandom Da li mozda znas neki dobar i opsiran tutorijal o koriscenju JOIN komande. Ono sto sam nasao u dokumentaciji nije mi mnogo pomoglo

Ja sam izvrsio tvoj mysqldump fajl, kreirao tabele i dodao slogove i izvrsio upit, ali mi je rezultat samo jedan slog (prva grupa). Prvo sam pokusao i sa mojim tabelema (koje vec imaju slogove) i isto jedan red.

pozdrav i hvala na pomoci