PDA

Pogčedajte punu verziju : GROUP BY grrrr


Blood
05. 09. 2006., 18:07
uh...mucim se sa ovim vec 3 sata i nikako da provalim.

Ne znam kako da objasnim drugacije osim primerom, pa evo primera:


SELECT *,COUNT(*) AS `count` FROM `tablea1` AS `t1`,`tablea2` AS `t2` WHERE t1.uid='1' AND t1.uid=t2.uid GROUP BY t2.name ORDER BY t1.id DESC;


E sada, ovaj kod radi, ali ne onako kako meni treba:

Recimo da je prva tabela sa porukama, a druga tabela sa informacijama o useru koji je poslao poruku. E sada, ja ovde kao output dobijem ono sto sam trazio:

Boban 5
Darko 3
marko 8
Janko 2
itd.

E sada, ja bih zeleo da ih sortiram po tako da mi prvi gore bude onaj koji je zadnji poslao poruku i to sam pokusao sa ORDER BY t1.id medjutim, kada sam uradio GROUP BY, on je povukao prvu poruku koju je poslao dati user i samim tim i t1.id te prve poruke, pa mi ne izlistava(sortira) po poslednjoj poruci, vec po poslednjoj poruci prvih poruka svih usera koji su poslali poruke...

Kako da mu stavim da mi izlistava poslednju poruku sa GROUP BYm ja sam probao sa:
.. GROUP BY t2.name,t1.id ali onda ne dobijem ono sto zelim vec nesto ovako(sto je i logicno):

Darko 1
Janko 1
Janko 1
Darko 1
Boban 1
Marko 1
Marko 1
itd...

Hvala

dee
05. 09. 2006., 18:29
SELECT *,COUNT(*) AS `count` FROM `tablea1` AS `t1`,`tablea2` AS `t2` WHERE t1.uid='1' AND t1.uid=t2.uid GROUP BY t2.name ORDER BY t1.id DESC;

jesi probao nesto ovako?


SELECT *, COUNT(tabela2.uid) AS count FROM tabela2 LEFT JOIN tabela1 ON
(tabela1.uid=tabela2.uid)
GROUP BY tabela1.uid ORDER BY tabela1.id DESC



lupam na brzinu iz jednog primjera sta sam ja koristio za slicnu stvar...

DejanVesic
05. 09. 2006., 20:00
uh...mucim se sa ovim vec 3 sata i nikako da provalim.

Ne znam kako da objasnim drugacije osim primerom, pa evo primera:


SELECT *,COUNT(*) AS `count` FROM `tablea1` AS `t1`,`tablea2` AS `t2` WHERE t1.uid='1' AND t1.uid=t2.uid GROUP BY t2.name ORDER BY t1.id DESC;


...
E sada, ja bih zeleo da ih sortiram po tako da mi prvi gore bude onaj koji je zadnji poslao poruku i to sam pokusao sa ORDER BY t1.id medjutim, kada sam uradio GROUP BY, on je povukao prvu poruku koju je poslao dati user i samim tim i t1.id te prve poruke, pa mi ne izlistava(sortira) po poslednjoj poruci, vec po poslednjoj poruci prvih poruka svih usera koji su poslali poruke...


Pretpostavimo da imaš tabelu Autora i Postova.

Onda bi to nekako bilo ovako:

Select Aut.Name,
(Select Count(*) From Post Where Post.IDautor = Aut.IdAutor) as PostCount,
(Select Max(Post.Date) From Post Where Post.IDautor = Aut.IdAutor) as LastPostDate
From Autor Aut
Order By 3 Desc