Avatar billede kodak Mester
12. juni 2014 - 13:22 Der er 14 kommentarer og
1 løsning

Log kun 1 gang hvert kvater

jeg har nogle kilder der uploader til min mysql rimelig ofte

men jeg vil gerne have at den kun gør det en gang i kvarter

så hvis klokken er xx:00 må den huske en log fra hver "unit_id"
så hvis klokken er xx:15 må den huske en log fra hver "unit_id"
så hvis klokken er xx:30 må den huske en log fra hver "unit_id"
så hvis klokken er xx:45 må den huske en log fra hver "unit_id"

så hvis der allerede eksistere en "unit_id" der er uploadet inde for dette kvarter skal den ignorere den.
Avatar billede conz Juniormester
12. juni 2014 - 17:25 #1
Du kunne bruge DateTime til at få klokken, også tjekke på om der er gået et kvarter fra sidst den kørte.
Avatar billede kodak Mester
13. juni 2014 - 14:15 #2
ja det havde jeg tænkt på

if (($upload_time > 'xx:00') && (($upload_time < 'xx:15')) {
    // load kun unit_id 1 gang
if (($upload_time > 'xx:15') && (($upload_time < 'xx:30')) {
    // load kun unit_id 1 gang
if (($upload_time > 'xx:30') && (($upload_time < 'xx:45')) {
    // load kun unit_id 1 gang
if (($upload_time > 'xx:45') && (($upload_time < 'xx:00')) {
    // load kun unit_id 1 gang


Men så kommer jeg heller ikke længere.
Avatar billede conz Juniormester
13. juni 2014 - 14:48 #3
Jeg ville nok lave en ekstra entry i din db, hvor du gemmer minuttallet, hver gang du uploader. Så vil jeg tage det nuværende minutal, og se om der er mere end 15 eller mere i mellem, før upload.

Minuttal får du ved date('i'), se mere her:
http://php.net/manual/en/function.date.php

Så noget lign.

// Få det nuværende minuttal med date('i').
$current_time = date('i')

// Flip evt negativt difference mellem tallene til en positiv (i tilfælge hvor vi er gået ind i en ny time).
$difference = abs($current_time - $last_upload)

// Hvis forskellen er større eller lig 15, upload da init_id
if($diff >= 15)
// load kun init_id 1 gang
Avatar billede kodak Mester
13. juni 2014 - 14:52 #4
jeg uploader allerede 2 forskellige time()
Avatar billede conz Juniormester
13. juni 2014 - 14:58 #5
Okay, så kan det jo være at et af dem kan bruges til dette formål.
Avatar billede kodak Mester
13. juni 2014 - 15:09 #6
sådan noget.

$get_date = date(strtotime($_REQUEST['d'] . " " . $_REQUEST['t']));
$diff = abs(date('i',$get_date) - date('i'));

if($diff >= 15) {
    mysql_query("...");
}
Avatar billede kodak Mester
13. juni 2014 - 15:11 #7
$_REQUEST['d'] er dato
$_REQUEST['t'] er klokken
Avatar billede kodak Mester
13. juni 2014 - 15:22 #8
måske nærmere:
$get_new_date = date(strtotime($_REQUEST['d']." ".$_REQUEST['t']));
$get_old_date = $latest['output_sand_time']; //hentet fra sidste input
           
$diff = abs(date('i',$get_new_date) - date('i',$get_old_date));
if($diff >= 15) {
    mysql_query("...");
}
Avatar billede kodak Mester
13. juni 2014 - 16:08 #9
den gælder jo ikke hvis:
den nye tid er 01
og den tidligere er 53

det giver en $diff på 52
Avatar billede kodak Mester
13. juni 2014 - 16:12 #10
men hvis jeg går tilbage til timestamp:

$get_new_date = date(strtotime($_REQUEST['d']." ".$_REQUEST['t']));
$get_old_date = $latest['output_sand_time'];

$diff = abs($get_new_date - $get_old_date);
if($diff >= (15 * 60)) {
    mysql_query("...");
}

skulle jeg så ikke være sikret så tager den afstanden mellem sekunder.
Avatar billede conz Juniormester
13. juni 2014 - 18:31 #11
Ah ja, der er stadig problemer når minutterne ruller over. Den missede jeg =(

Så jo, løsningen er at bruge timestamp, der undgår du alle sådanne faldgruber.
Avatar billede conz Juniormester
13. juni 2014 - 18:32 #12
Også har du faktisk heller intet at bruge abs() til, da resultatet aldrig vil blive negativt. Så sparer du (lidt) performance der.
Avatar billede kodak Mester
13. juni 2014 - 19:15 #13
takker for hjælpen
Avatar billede conz Juniormester
13. juni 2014 - 20:41 #14
Selv tak, bare behold point.
Avatar billede kodak Mester
13. juni 2014 - 21:25 #15
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester