Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoc oko upita za mini forum

[es] :: MySQL :: Pomoc oko upita za mini forum

[ Pregleda: 2458 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Boyce

Član broj: 45853
Poruke: 13
*.freeserbia.sezampro.yu.



Profil

icon Pomoc oko upita za mini forum28.06.2005. u 21:23 - pre 229 meseci
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
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.1.14.vie.surfer.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Pomoc oko upita za mini forum29.06.2005. u 21:03 - pre 229 meseci
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]
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
Prikačeni fajlovi
 
Odgovor na temu

Boyce

Član broj: 45853
Poruke: 13
*.smin.sezampro.yu.



Profil

icon Re: Pomoc oko upita za mini forum30.06.2005. u 14:25 - pre 229 meseci
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
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.1.14.vie.surfer.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Pomoc oko upita za mini forum30.06.2005. u 14:47 - pre 229 meseci
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?
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

Boyce

Član broj: 45853
Poruke: 13
*.smin.sezampro.yu.



Profil

icon Re: Pomoc oko upita za mini forum30.06.2005. u 14:59 - pre 229 meseci


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
 
Odgovor na temu

[es] :: MySQL :: Pomoc oko upita za mini forum

[ Pregleda: 2458 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.