[ dr ZiDoo @ 13.12.2006. 17:26 ] @
Primjer:

TABELA alfa:
Code:

alfa_id int
alfa_name varchar(20)
alfa_nijebitno varchar(150)


TABELA beta:
Code:

alfa_id int
beta_id int
beta_nijebitno varchar(150)


TABELA gama
Code:

alfa_id int
gama_id int
gama_nijebitno varchar(150)



Rezultat koji treba da dobijem izgleda otprilike ovako
Code:

+---------+-----------+---------------+----------------+
| alfa_id | alfa_name | ukupno_beta   | ukupno_gama    |
+---------+-----------+---------------+----------------+
| 1       | red       | 10            | 23             | 
| 2       | blue      | 12            | 24             | 
+---------+-----------+---------------+----------------+


Znaci neki podaci iz tabele alfa i broj slogova iz ostalih tabela za dati alfa_id.
Meni na pamet ne pada ni jedan jedini elegantan nacin, a vjerujm da neko pametan to mozda zna.
[ Dejan Topalovic @ 13.12.2006. 21:25 ] @
Code:
select sub1.alfa_id, sub1.alfa_name, sub1.ukupno_beta, sub2.ukupno_gama
from
(select a.alfa_id, a.alfa_name, count(*) ukupno_beta
from alfa a
left join beta b on b.alfa_id = a.alfa_id
group by a.alfa_id) as sub1,
(select a.alfa_id, a.alfa_name, count(*) as ukupno_gama
from alfa a
left join gama g on g.alfa_id = a.alfa_id
group by a.alfa_id) as sub2
where sub1.alfa_id = sub2.alfa_id
order by sub1.alfa_id;


ili
Code:
select a.alfa_id, a.alfa_name, sub1.ukupno_beta, sub2.ukupno_gama
from alfa a, (select b.alfa_id, count(*) ukupno_beta from beta b group by b.alfa_id) as sub1,
(select g.alfa_id, count(*) ukupno_gama from gama g group by g.alfa_id) as sub2
where a.alfa_id = sub1.alfa_id and a.alfa_id = sub2.alfa_id;

Vjerovatno postoji i elegantnije rjesenje, ali mi se ne da dublje ulaziti u rjesavanje upita...
[ voligoya @ 14.12.2006. 07:48 ] @
Suvise komplikovano, predlazem da problem resis jednom petljom, ili malo preuredis tabele ovako ce ti svaka promena i provera biti kopalje po SQL upitima
[ Dejan Topalovic @ 14.12.2006. 08:37 ] @
@voligoya: Cime bi mogao argumentovati tu izjavu da je bolje odraditi to u petlji (vjerovatno mislis u nekom programskom jeziku?) ? Evo, ja sam se spreman kladiti, da ce ovaj SQL upit biti brzi nego da se to odradjuje u petlji.
[ voligoya @ 14.12.2006. 10:17 ] @

Citat:
Dejan Topalovic: @voligoya: Cime bi mogao argumentovati tu izjavu da je bolje odraditi to u petlji (vjerovatno mislis u nekom programskom jeziku?) ? Evo, ja sam se spreman kladiti, da ce ovaj SQL upit biti brzi nego da se to odradjuje u petlji.


Da mislio sam u nekom programskom jeziku, uopste ne znam ni o kojoj se bazi radi, ali pogledaj molim te upit koji se odnosi na tri proste tabele, sta ako treba da sumira i u isto vreme izvuce neki minimum iz tih tabela, opet da lomim glavu sa SQL, ne hvala. A sto se tice brzine upita, spoji ti tri tabele sa kolicinom zapisa preko 100000, tada glasam za tri upita nad po jednom tabelom.
[ Dejan Topalovic @ 14.12.2006. 10:29 ] @
Evo ponavljam - spreman sam se kladiti s tobom na bilo koju sumu, da ce SQL biti brzi od izracunavanja putem programskog jezika.
[ dr ZiDoo @ 14.12.2006. 15:17 ] @
Baza podataka je mySQL5 a programski jezik je PHP.

Inace kod treba da bude u aplikaciji na koju se ocekuje ogroman napad :) korisnika. Kada bi PHPu dao da mi odradi 20 puta (izraz ce uglavnom vracati 20 slogova) i onda u svakom jos po jedan SQL izaraz apache bi tak poludio da bi sam prepravio svoj kod u nekku 3D pucacinu a mySQL bi se iz servera presteko u UPS :)

I ovako je pitanje kako ce mySQL reagovati na ovako slozen upit. U svakom slucaju Dejane veliko hvala.
[ Dejan Topalovic @ 14.12.2006. 15:18 ] @
@dr Zidoo: Javi da li upit radi. :)
[ dr ZiDoo @ 15.12.2006. 14:37 ] @
Upit radi, ali tako zgazi mySQL da je to ne vidjeno. Na kraju sam moro counte staviti u prvu tabelu pa sada sve sto radim na ovim tabelama (brisem, dodajem) moram uslkadjivati sa glavnom :)

U svakom slucaju, poucno i definitivno ce zatrebati jos koji put.
[ djordje @ 15.12.2006. 21:41 ] @
Citat:
ali tako zgazi mySQL da je to ne vidjeno


Sta si hteo reci ovim?
[ dr ZiDoo @ 16.12.2006. 02:14 ] @
Da pod normalnim opterecenjem kakvog imam baza podataka uspori do boli, samim time prekoracim PHP exec time i to bi otprilike bilo to.