[ Neznalica_sa_ugla @ 22.02.2010. 11:11 ] @
Molim pomoć !! imam tablicu , koja je napravljena od prethodnog upita

Code:

     id_upisa        id_osobe        id_zaduzenje 
      1                      1                  2 
      2                      1                  2          
      3                      2                  2 
      4                      3                  1 
      5                      4                  2
      6                      1                  1 
      7                      5                  1
      8                      2                  1
      9                      1                  2
    10                      3                  2 
    11                      2                  2     
    12                      2                  1  
   


Upit na ovu tablicu bi trebao vratiti sve osobe koje trenutno imaju id_zaduzenja=1 , ne koje su prije bile na tim zaduzenjima .
odgovor : bi bio osobe ( 5 i 2) ,a ne osobe ( 1,3,4)
( osoba 1 devetim upisom dobila zaduženje 2
osoba 3 desetim upisom dobile zaduženje 2
osoba 4 svakako je imala zaduženje 2)

Meni je potreban odgovo : 2,5 . ( 2 stavkom 12 , 5 stavkom 7 , su dobile zaduženje 1 )
HVALA




[ MarkoBalkan @ 22.02.2010. 11:34 ] @
pa podaci ti se duplaju.
id_osobe i id_zaduženje.

stavi još recimo jedno polje bool, 1 za duguje kako hočeš , a 0 zatvoreno dugovanje.


[ Neznalica_sa_ugla @ 22.02.2010. 12:32 ] @
Mala dopuna ,vidim da je pogrešno protumačeno id_zadzženja : 1 > radovi u vrtu ; 2 -radovi u kuhinji ; 3 -> održavanje voznog parka ......
to što se 'duplaju' znaci da je osaoba završila jedan posao i počela drugi
[ MarkoBalkan @ 22.02.2010. 12:39 ] @
ali recimo za osobu s id-em 1 imaš dva puta isto zaduženje
onda ti ne valja model baze.

Code:

id zaduženje
1  2
1  2
[ Neznalica_sa_ugla @ 22.02.2010. 16:03 ] @
??? A što nebi valjalo , čovjek oguli krompire , ode u vrt očistiti baze i vreti se u kuhinju baciti smeće , i tako svaki dan. NIje postavljeno pitanje normalizacije baze , ovdje je riječ o upitu , a ja sam očigledno dosta zardjao , ... e gdje je sada chachka ?????
[ MarkoBalkan @ 22.02.2010. 18:38 ] @
zato što imaš duplanje podataka.

čudiš se kako ti ne radi, a veliš da je ok.
ovako kako ti imaš podatke, ne možeš dobiti ništa.
[ bugsu @ 23.02.2010. 09:54 ] @
tebi treba samo da je kolona id_upise UNIQE a ostale da nisu .. i onda ce ti raditi ....
[ bogdan.kecman @ 23.02.2010. 13:35 ] @
ako sam te ja dobro svatio, ti imas za svaku radnju upisano u tabelu "ko" je radio i "sta je radio" i oces da izvades sta je radio "poslednje"??

problem:
id_upisa mysql ti ne garantuje da ce auto_increment (Sto ovde verovatno koristis) ici PO REDU, tj da je slog sa ID 100 upisan PRE sloga sa ID 200 ... dakle bez problema moze da bude obrnuto !!!! tako da ako hoces "Vremenski" poslednji onda moras da dodas neki timestamp i u njega da upisujes vreme posto trazenje "zadnjed id-a" nece da radi (uvek).

dakle ako uzmemo da ti je tabela
Code:

create table t1 (
 id_upisa int auto_increment primary key, 
 id_osobe int, 
 id_zadozenja int, 
 vreme_upisa timestamp not null default='NOW()'
);


onda ces na primer za usera 10 da dobijes "poslednju radnju":

Code:

select * from t1 where 
id_osobe = 10 
order by vreme_upisa desc 
limit 1;


e sad ... ovo sto ti hoces (koji useri su "zadnji" cistili krompir?) je malo kompleksnije ..

Code:

select x.id_osobe, 
(select id_zaduzenja from t1 y where x.id_osobe = y.id_osobe 
order by vreme_upisa desc 
limit 1)
from t1 x
group by x.id_osobe


[ Shinhan @ 24.02.2010. 07:19 ] @
Drugo rešenje je da imaš dve tabele, jedna za šta su poslednje radili, a jedna za arhivu. I onda kad se dodaje nešto novo, ako za taj tip postoji zapis u aktivnoj prvo to pomeriš u arhivu a onda novo snimiš u aktivnu. Naravno, opet ti treba datumsko polje u obe tabele, ali na ovaj način je lakši i brži upit za trenutno stanje. Ovo bi možda i trigerom moglo da se uradi.