Jump to content
php.lv forumi

mysql timer


gunmetal

Recommended Posts

  • Replies 52
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

ko jūs tur murgojat par kaut kādiem CRONiem un mysql eventiem?

 

Vienā laukā tev ir punktu skaits, citā laukā tev ir laiks, kurā šis punktu skaits ir pievienots.

 

Users

-----

points

points_time

 

 

Tagad, ja tev vajag attēlot cik pašlaik ir punkti, izrēķini laika starpību ($dt) starp tagadni un pēdējo reizi, kad punkti tika saglabāti.

Pieņemsiom, tev tabulas ieraksts ir ielasīts masīvā $row;

Tad

$dt=$now-$row['points_time'];

$points=$row['points']+$c*$dt;

kur

$c - konstante cik punktus pieskaitīt laika vienībās. Piemēram, ja $dt ir sekundēs, lai būtu viens punkts stundā, tad $c=1/3600;

$dt - laika starpība starp tagadni un pēdējo ierakstu.

 

Tālāk, ja vajag pieskaitīt vai atņemt papildus punktus un uzreiz, tad izrēķinām jauno punktu vērtību un pieskaitām punktus

$points=$row['points']+$c*$dt;

$points+=$extrapoints;

un saglabājam db, gan jauno punktu skaitu, gan šī brīža laiku.

Edited by codez
Link to comment
Share on other sites

ko jūs tur murgojat par kaut kādiem CRONiem un mysql eventiem?

Ja punktiem nav nekādas reālas nozīmes, tad jā, murgojam. Bet ja vajag teiksim rādīt kaut kur lapas stūrītī top-5 lietotājus, tu nopietni piedāvā katrā query papildus skaitīt cik ir visiem lietotājiem un no tiem meklēt 5? Tadas lietas manuprāt jāpārdomā uzreiz.
Link to comment
Share on other sites

:D Ha.. man arī bija līdzīga problēma, bet nācās kādu stundiņu pasvīst pie loģiskās domāšanas un tiku klāt pie kaut kā tāda.

function energygive(){
/**
* izrēķina iegūto enerģiju laikā, kad bija prom.
**/
global $_SESSION;
if (isset($_SESSION['userID']) && !empty($_SESSION['userID'])) {
	$query = query("SELECT `energy`,`lastenergyupd`,`energymax` FROM `users` WHERE id = ".$_SESSION['userID']);
	$time = time();
	$secsaway =  $time - $query->lastenergyupd;
	//print $query->lastenergyupd."<br/>";
	//print $time."<br/>";
	//print $time-$query->lastenergyupd."<br/>";

	if($secsaway > energyadd){
		$energygive = floor($secsaway/energyadd);
		//print $energygive."<br/>";
		$secsleft = $secsaway % energyadd;
		//print $secsleft."<br/>";
		$lastenergyupd = $time - $secsleft;
		//print $lastenergyupd."<br/>";

		$energynow = $query->energy+$energygive;
		if($energynow > $query->energymax){
			$energynow = $query->energymax;
			query("UPDATE `users` SET energy = ".$energynow.", lastenergyupd = ".$time." WHERE `id` = ".$_SESSION['userID']);
		}else{
			query("UPDATE `users` SET energy = energy + ".$energygive.", lastenergyupd = ".$lastenergyupd." WHERE `id` = ".$_SESSION['userID']);
		}
	}else{
		return true;
	}
}
}

Link to comment
Share on other sites

Man ir sadaļa sistema

kur atrodas

id un nosaukums un daudzums

1 un (piem. māja) un 37(punkti stundā)

 

un sadaļa Members

nu viss par lietotāju un

... ēka un punkti

... (māja) un (37)

 

sadaļā sistēma man ir punktu skaiti noteiktai ēkais, bet sadaļā members parāka kāda ēka un cik punktus tā dot

Link to comment
Share on other sites

CREATE TABLE `sitema` (
 `id` int(10) NOT NULL auto_increment,
 `nosaukums` varchar(20) NOT NULL,
 `punkti` varchar(20) NOT NULL
 PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;

-- 
-- Dati tabulai `sistema`
-- 

INSERT INTO `sistema` VALUES (1, 'māja', '10');
INSERT INTO `sistema` VALUES (2, 'kūts', '23');
INSERT INTO `sistema` VALUES (3, 'pirts', '15');

-- --------------------------------------------------------

-- 
-- Tabulas struktūra tabulai `members`
-- 

CREATE TABLE `members` (
 `id` int(11) NOT NULL auto_increment,
 `username` varchar(30) NOT NULL default '',
 `password` varchar(255) NOT NULL default '',
 `email` varchar(55) NOT NULL default '',
 `eka` varchar(55) NOT NULL default '',
 `dot` varchar(55) NOT NULL default '',
 `punkti` varchar(55) NOT NULL default ''
 PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;

-- 
-- Dati tabulai `members`
-- 

INSERT INTO `members` VALUES (1, 'admin', '****', 'agris1624@inbox.lv', 'kūts', '23', '0');

Edited by gunmetal
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...