Tabulka

Programovacie jazyky, rady, poradňa...
vajda65
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1250
Registrovaný: 22 feb 2005, 16:36
Bydlisko: hojko.com
Kontaktovať používateľa:

Tabulka

Príspevok od používateľa vajda65 »

Ahojte programátor mi robí dochádzkový softvér na php-čku, je to na mysql, takže beží to cez databázu, celá historia je ukladaná do tabulky history, problém je v tom že php-čko generuje reporty vždy za celé obdobie čo tam sú naimportované nie len za ten konkrétny mesiac a tym pádom sa to postupne spomaluje.

Nedá sa nejak spraviť aby tie údaje z tabulky boli vždy napríklad za 6 mesiacov, tj tie ostatné by sa nejak archivovali alebo proste nebrali to úvahy.
Ale nebolo by dobré aby zmizli takže neja aby tam boli ale nebralo do úvahy tie staré dáta.

Hrozne napísane, lepšie to neviem. :D Dúfam že to niekto pochopí. Mám dobrého programátora ale tu sa nejak zasekol, chcel som mu pomôcť s nejakou ideo.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

samozrejme že sa to dá, povedz to tomu programátorovi čo ti to robí. My ti ťažko poradíme keď ani nevieme o čo ide a ako je to robené
impact
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 401
Registrovaný: 17 nov 2005, 16:04

Príspevok od používateľa impact »

A keby ten programator doplnil do kodu kontrolu datumu posledneho exportu do DB?

Jednoducho si poznaci, kedy naposledy daval data do DB a druhy krat pokracuje odtial.
vajda65
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1250
Registrovaný: 22 feb 2005, 16:36
Bydlisko: hojko.com
Kontaktovať používateľa:

Príspevok od používateľa vajda65 »

impact napísal:A keby ten programator doplnil do kodu kontrolu datumu posledneho exportu do DB?

Jednoducho si poznaci, kedy naposledy daval data do DB a druhy krat pokracuje odtial.
toto nie, export môže prebiehať aj 20x denne, ide o to že generuje report aj ked je za november aj z dát ktoré sú za január.....

to audiotrack: mne aj jemu je idea pravdepodobne jasná ale nejaký princíp by to chcelo, netreba presne iba princíp.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

tak a čo sú to za dáta? keď viež že generuje aj zo starých, znamená to že majú v tabuľke uložený aj nejaký dátum. Tak kde je problém? Obyčajná podmienka kde sa porovná či je aktuálny mesiac zhodný s mesiacom záznamu. Ak hej tak ho vytiahne, ak nie tak nič
vajda65
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1250
Registrovaný: 22 feb 2005, 16:36
Bydlisko: hojko.com
Kontaktovať používateľa:

Príspevok od používateľa vajda65 »

ok princíp je my jasný posuniem to dalej uvidím čo povie.
dík
impact
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 401
Registrovaný: 17 nov 2005, 16:04

Príspevok od používateľa impact »

vajda65 napísal:toto nie, export môže prebiehať aj 20x denne, ide o to že generuje report aj ked je za november aj z dát ktoré sú za január.....
Prepac, zle som sa asi vyjadril. Preco teda nespravi podmienku, ze sa data budu generovat iba z dat za november?

edit: Poslal som to trosku neskor ako som chcel :). Ten import udajov by si mohol spravit napr. tak, ze subor s datami posles na FTP a PHP si to uz nacita a spracuje priamo na servery.
vajda65
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1250
Registrovaný: 22 feb 2005, 16:36
Bydlisko: hojko.com
Kontaktovať používateľa:

Príspevok od používateľa vajda65 »

ešte jedná vec, takisto chcem urobiť v menu možnosť zálohy údajov, to nie je problém avšak spomínal že problem môže byť pri obnove kedže php podporuje iba 2MB súbory takže ak by presiahol túto veľkosť čo sa môže stať tak by mohol byť problém.

Nejaký nápad ako toto vyriešiť (gzip???)
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Najlepšie by asi bolo to, čo ti písal impact. Teda zálohu vytvárať na webe a potom si ju stiahnuť cez ftp. Pri obnovení zálohy by si ten súbor nahral cez ftp a potom obnovil. Problém pravdepodobne bude s tým, že pri väčšej tabuľke sa prekročí maximálny čas vykonávania php skriptu.

Ak sa ti s tým nechce hrať, vyskúšaj mysqldumper. ;)
vajda65
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1250
Registrovaný: 22 feb 2005, 16:36
Bydlisko: hojko.com
Kontaktovať používateľa:

Príspevok od používateľa vajda65 »

práve v tom je problém že pri väčšej tabulke to prekročí ten časový limit, to s tým ftp nie je vhodné

na čo je ten dumper??ako to funguje?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Slúži to práve na zálohovanie (a obnovovanie) dát v MySQL. Môžeš tam nastaviť, či sa má použiť kompresia, maximálnu veľkosť súboru, časové obmedzenie... a ten skript sa už o všetko ostatné postará.
vajda65
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1250
Registrovaný: 22 feb 2005, 16:36
Bydlisko: hojko.com
Kontaktovať používateľa:

Príspevok od používateľa vajda65 »

ok posuniem to programatorovi uvidíme čo s tým spraví. Je to exáč alebo dúfam že skript?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Je to skript v PHP.
vajda65
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1250
Registrovaný: 22 feb 2005, 16:36
Bydlisko: hojko.com
Kontaktovať používateľa:

Príspevok od používateľa vajda65 »

vdaka...
vajda65
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1250
Registrovaný: 22 feb 2005, 16:36
Bydlisko: hojko.com
Kontaktovať používateľa:

Príspevok od používateľa vajda65 »

takže podmienka tam vraj je:

$query = "SELECT datum FROM history WHERE id_doch='$id_doch' AND datum>='".$datum."000000' AND datum<='".$datum."235959' AND pr='0' AND typ='1' AND fy='$fy' ORDER by datum ASC LIMIT 1";

$query = "SELECT * FROM history WHERE id_doch='$id_doch' AND id<>'$odchod_lu' AND datum<='".$datum_odch."' AND datum>='".$datum."000000' AND typ='0' AND fy='$fy' ORDER by datum DESC LIMIT 1";

spomaluje sa to vraj preto, lebo ked je v databaze vela zaznamov tak aj kym vyhlada pozadovany datum konkretneho zamestnanca tak to trva dlhsie.

Vstup do tabulky ide cez funkčné klávesy každá klávesy je určitý príchod alebo odchod...

Kód: Vybrať všetko

<?
	function import($line, $fy) {
		$pole = explode(",", $line);
		if (($pole[5] != "None")) {
			$datum = $pole[1][0].$pole[1][1].$pole[1][2].$pole[1][3].$pole[1][5].$pole[1][6].$pole[1][8].$pole[1][9].$pole[2][0].$pole[2][1].$pole[2][3].$pole[2][4].$pole[2][6].$pole[2][7];
			$id_doch = $pole[5];
			$pr="";
			$typ="";
			switch($pole[10]) {
				case "F1-0": $pr=0; $typ=1;		break;	// Práca					PRÍCHOD
				case "F1-1": $pr=1; $typ=1;		break;	// Služobne					PRÍCHOD
				case "F1-2": $pr=2; $typ=1;		break;	// Služobná cesta			PRÍCHOD
				case "F1-3": $pr=3; $typ=1;		break;	// Súkromne					PRÍCHOD
				case "F1-4": $pr=4; $typ=1;		break;	// Lekár					PRÍCHOD
				case "F1-5": $pr=5; $typ=1;		break;	// Platené voľno			PRÍCHOD
				case "F1-6": $pr=6; $typ=1;		break;	// Študijné voľno			PRÍCHOD
				case "F1-7": $pr=7; $typ=1;		break;	// Verejný záujem			PRÍCHOD
				case "F1-8": $pr=8; $typ=1;		break;	// Náhradné voľno			PRÍCHOD
				case "F1-9": $pr=9; $typ=1;		break;	// Dovolenka				PRÍCHOD
				case "F2-0": $pr=10; $typ=1;	break;	// Mimopracovná činnosť		PRÍCHOD
				case "F2-1": $pr=11; $typ=1;	break;	// Nadpracovanie			PRÍCHOD
				case "F2-2": $pr=12; $typ=1;	break;	// Otváranie zámku			PRÍCHOD
				case "F2-3": $pr=13; $typ=1;	break;	// Príchod/Odchod			PRÍCHOD
				case "F2-4": $pr=14; $typ=1;	break;	// Nasnímaná nová karta		PRÍCHOD
				case "F2-5": $pr=15; $typ=1;	break;	// Práceneschopnosť			PRÍCHOD
				case "F3-0": $pr=0; $typ=0;		break;	// Práca					ODCHOD
				case "F3-1": $pr=1; $typ=0;		break;	// Služobne					ODCHOD
				case "F3-2": $pr=2; $typ=0;		break;	// Služobná cesta			ODCHOD
				case "F3-3": $pr=3; $typ=0;		break;	// Súkromne					ODCHOD
				case "F3-4": $pr=4; $typ=0;		break;	// Lekár					ODCHOD
				case "F3-5": $pr=5; $typ=0;		break;	// Platené voľno			ODCHOD
				case "F3-6": $pr=6; $typ=0;		break;	// Študijné voľno			ODCHOD
				case "F3-7": $pr=7; $typ=0;		break;	// Verejný záujem			ODCHOD
				case "F3-8": $pr=8; $typ=0;		break;	// Náhradné voľno			ODCHOD
				case "F3-9": $pr=9; $typ=0;		break;	// Dovolenka				ODCHOD
				case "F4-0": $pr=10; $typ=0;	break;	// Mimopracovná činnosť		ODCHOD
				case "F4-1": $pr=11; $typ=0;	break;	// Nadpracovanie			ODCHOD
				case "F4-2": $pr=12; $typ=0;	break;	// Otváranie zámku			ODCHOD
				case "F4-3": $pr=13; $typ=0;	break;	// Príchod/Odchod			ODCHOD
				case "F4-4": $pr=14; $typ=0;	break;	// Nasnímaná nová karta		ODCHOD
				case "F4-5": $pr=15; $typ=0;	break;	// Práceneschopnosť			ODCHOD
				case "None": $pr=12; $typ=2;	break;	// Otváranie zámku			PRECHOD


			}
//			echo "Datum: $datum, Cas: $cas, ID: $id_doch, $pr - $typ. Firma: $fy<br>";

			$query = "SELECT id FROM history WHERE fy='$fy' AND id_doch='$id_doch' AND pr='$pr' AND typ='$typ' AND datum='$datum' LIMIT 1";
			$result = mysql_query ($query);
			$row = mysql_fetch_object ($result);
			if ($row > 0) {
				$duplikatov++;
			} else {
				$query = "INSERT INTO history SET fy='$fy', id_doch='$id_doch', pr='$pr', typ='$typ', datum='$datum'";
				if (($datum != "") && ($id_doch!=""))mysql_query ($query);
				$zaznamov++;
			}
		}
	}
?>

Je ta podmienka spravená dobre, je to pravda že aj to trvá dlhšie, alebo máte nejaký nápad ako to zeefektívniť?


Dík
Napísať odpoveď