Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Ei nyt ihan 365 kyselyä ole tarpeen tietokannalle...

str4nd [10.03.2006 17:40:51]

#

MySQL-ongelma... Mulla on blogiviestejä kannassa nyt noin tuhat ja nyt teen tai ainakin yritän tehdä niistä jatkuvaa tilastokäyrää. Ei olisi järkevä vetää 365 eri kyselyä erikseen vain yhtä käyrää varten. Seuraavaan tyyliin tulisi saada yhdellä kyselyllä tulosta:

<?php
$array = array();
for ($kuukausi=1; $kuukausi<=12; $kuukausi++) {
	for ($maara=1; $maara<=date("t",mktime(0,0,0,$kuukausi,1,date("Y"))); $r++) {
		$alkamisaika = mktime("0","0","0",$kuukausi,$maara,date("Y"));
		$paattymisaika = mktime("23","59","59",$kuukausi,$maara,date("Y"));
		$kysely = mysql_query("SELECT COUNT(*) FROM `viestit` WHERE `aika`>$alkamisaika && `aika`<$paattymisaika LIMIT 1");
		$array[] = mysql_fetch_assoc($kysely);
	}
}
// $array on viestien määrä päivälle:
// $array = array( 4, 2, 5, 6, 3 .... )
?>

En missään nimessä halua edes kokeilla tuollaista scriptiä, minkä tein viestiä varten! ^_^ Tein tuon esimerkkikoodin vain "selventämään" asiaa, enkä usko, että tuo toimii ;-)

Mitenkä saisin tehtyä sen niin, että saisin unix-timestampista joka päivälle COUNT(*)-tiedot yhdellä kyselyllä esimerkiksi tuon 365:n sijaan?

ajv [10.03.2006 17:45:16]

#

Haet varmaankin jotain tämän tyylistä:

SELECT DATE_FORMAT(aika, '%d%m%Y') AS pvm, COUNT(*) AS summa FROM viestit GROUP BY pvm

str4nd [10.03.2006 17:52:15]

#

ajv kirjoitti:

Haet varmaankin jotain tämän tyylistä

Jep, mutta minulla on kaikki unix_timestamppeina.

Lumpio- [10.03.2006 17:54:31]

#

str4nd: Siksi muunnatkin ne heti DATETIMEiksi. Queryt

ALTER TABLE posts ADD tempDate DATETIME NOT NULL;
UPDATE posts SET tempDate = FROM_UNIXTIME(date);
ALTER TABLE posts DROP date;
ALTER TABLE posts CHANGE tempDate date DATETIME NOT NULL;

ajavat asian. (Varmuuskopio ennen tollaista muutosta!) Käytin nyt geneerisiä fieldinimiä, mutta osaat kai soveltaa.

str4nd [10.03.2006 17:57:29]

#

Jep, Thanks :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta