Jump to content
php.lv forumi

uuuber selekteeeshana


andre

Recommended Posts

man ir tabula ar cilveeku grupu, kuri rok bedri. Peec kaad laika atnaak cits un aizvieto vinu. tabulee pieregistreejas cilveeka vaards un kad saaci straadaat. Kad vinsh ir saacis, tas noziimee ka ieprieksheejais ir beidzis...

cilveeks | kad darbs ir saakts

jaanis | 16:00

maartinsh| 17:00

jaanis | 18:00

didzis | 19:00

maatrinsh| 20:00

utt

...

 

kaa var izseleckteet datus, kura persona ir cik stundas straadaajusistraadaajis ???

Link to comment
Share on other sites

man domaaat, ka dotajaa tabulas struktuuraa ar 1 selektu tas nav iespeejams.

piem, ja peedeejais ieraxts tabulaa ir

Peeteri/23:45, tad sanaak, ka Peeteris ir straadaajis 4ever :)

 

Taapeec es taisiitu tabulu:

 

cilvis/darbs_saakts/darbs_beigts

 

tad vienkaarshi uztaisiit

 

select sum(darbs_beigts-darbs_saakts) from work_table group by cilvis....

Link to comment
Share on other sites

vienkaarshi peedeejo ierakstu nenemt galvaaa, un kaapeec taisiit veel papildus ierakstu ar darba beigshanu, ja naakoshaaa ieraksta darba saakuma laiks sakriit ar ieprieksheejaaa ieraksta darba beigshanu ???

 

ja nevar ar vienu selektu to uztasiiit, mosh kaads pateiks kaa to var ar vairaakiem selectiem...

 

Ieprieksh saku paldies! :)

Link to comment
Share on other sites

Man domat, tikai ar selektu to uztaisit nevar. Te jataisa ta, ka select visus ierakstus vai par konkretu laika periodu, kas interese, un tad jaiet cauri ierakstiem un jasaskaita laiki par attiecigo cilveku. Pirms tam drosi vien jauztaisa array ar cilvekiem, kur tos laikus pieskaitit. Array ar cilvekiem savukart pirms tam var dabut ar atsevisku 'select distinct cilveks from...'

 

Lai aprakstitu laikus, kad neviens nerok bedri, butu jaieviesh cilveks 'nobody', tipa, kad peteris aiziet prom un janis vel nav atnacis, vinam japieraksta, ka it ka bedri sacis rakt sis te 'nobody', un tad saskaitot laikus, sos te nekur nepieskaita.

Link to comment
Share on other sites

DB struktuuraa "liekus" laukus via "liekus" indexus biezhi vien naakas ieviest taapeec, lai pats algoritms buutu vienkaarhsaaks.

Es Tev paraadiiju, kaa pamodificeet tabulu, lai to visu dabuutu gatavu ar vienu selectu :)

Savaadaak ir jaataisa kaut kas taac:

 

$res=mysql_query('select * from work_table order by x_time');
while ($l=mysql_fetch_assoc($res) {
    $data[]=$l;
}
for ($x=0;$x<sizeof($data)-1;$x++){
     $pplz[$data[$x]['cilvis']]+=$data[$x+1]['x_time']-$data[$x]['x_time'];
}

 

Tad nu Tev beigaas buus masiivs $pplz, kur kura indexi buus cilveeku vaardi un atteiciigaas veertiibas sho cilvju nostraadaatie laiki.

 

Iemesls, kaapeec to nevar izdariit tikai ar query, ir tas, ka mysql var reekjinaat & darboties tikai attieciigaas tabulas rindas ieraxtiem (nevis ar rindu+1 vai rindu-7). Tieshi taapeec, lai to izdariitu tikai ar sql, ir jaaieviesh papildus laux: darba beigshana.

Tad nu skaties pats, kas Tev vienkaarshaak :)

Link to comment
Share on other sites

Shkiet, ka vareetu uztaisiit ar JOINu (tikai ideja).

 

tabula table:

uid|name|starttime|endtime

 

Jaanis saak darbu 12:45

 

UPDATE table SET `endtime` WHERE `uid`='peedajais_uid'

 

1|Nobody|0|12:45

 

INSERTS:

 

2|Jaanis|12:45|...

 

Atnaak Peeteris 16:00:

 

update:

2|Jaanis|12:45|16:00

 

insert:

3|Peeteris|16:00

 

Kaa uzzzinaak kursh shobriid straadaa?

SELECT `name` FROM table WHERE endtime IS NULL

 

Kaa uzzinaat sik kursh ir nostraadaajis?

 

SELECT name,(endtime-starttime) FROM table

LEFT JOIN table ON endtime=startime

 

Neesmu meegjinaajis, vareetu buut, ka atgriezh taa tur laiku, kas straadaaja ieprieksh, bet tas arii buutu apejams

Link to comment
Share on other sites

×
×
  • Create New...