tamtaram Posted February 20, 2007 Report Share Posted February 20, 2007 datubāzītē man laiciņš stāv šitā '2007-02-20 18:05:19' pirmais: kā man šito formātu saskaldīt atsevišķi pa gadiem, mēnešiem un datumiem, laiks nav svarīgs. otrais: kā pieprasīt vēlamo gadu, mēnesi vai datumu, tā lai viņš izmestu visus attiecīgos tā gada mēneša vai datuma ierakstus. traki ar tām izteiksmēm iet, nezinu kurā pusē burties. vienīgais ko esmu uztaisījis ir primitīva teksta izvilkšana 'preg_match('([0-9]/*[0-9]*)', $var, $res);' Link to comment Share on other sites More sharing options...
Stopp Posted February 20, 2007 Report Share Posted February 20, 2007 Šādā gadījumā parasti explode pa -, : un atstarpes simboliem. Link to comment Share on other sites More sharing options...
Roze Posted February 20, 2007 Report Share Posted February 20, 2007 Nu nav jau obligāti ar regulārajām ekspresijām uzreiz jāņemas.. Ja datubāzīte ir MySQL var izmantot DATE_FORMAT http://dev.mysql.com/doc/refman/4.1/en/dat...-functions.html SELECT DATE_FORMAT(datuma_lauks,'%Y') AS gads, DATE_FORMAT(datuma_lauks,%m) AS menesis, DATE_FORMAT(datuma_lauks,%d) AS diena to pashu var izdarīt arī ar php un date() funkciju http://lv.php.net/date $gads = date("Y",strtotime('2007-02-20 18:05:19')); utt.. Kas attiecas uz atlasīšanu tad MySQLam idejiski var prasiit WHERE datuma_lauks LIKE '2007-%' vai datuma_lauks LIKE '2007-01-%' .. No ātrdarbības viedokļa tas gan nav baigi fiksi. Līdz ar to pie lielākiem apjomiem datus nepieciešams dalīt un indeksēt.. bet tas atkarīgs ko un kā lieto. update: faktiski ar php var izmantot getdate() http://lv.php.net/manual/en/function.getdate.php dabūsi apakaļ uzreiz visu datumu sadalītu pa gabaliem un vēl šādu tādu info.. Link to comment Share on other sites More sharing options...
bubu Posted February 20, 2007 Report Share Posted February 20, 2007 uz otrais punktu: WHERE datums >= $sakuma_datums AND datums < $beigu_datums Link to comment Share on other sites More sharing options...
tamtaram Posted February 20, 2007 Author Report Share Posted February 20, 2007 nu tā, savākšanai es beigās nolēmu izmantot getdate() un atlasīšanai Rozes variantu, bet izskatās, ka variētākai atlasīšanai ņemšu bubu piemēru. paldies jums. offtopikā atgriežos pie iepriekšējiem postiem par rekursiju, starp lietotāju kokiem un viņu savstarpēju punktu skaitīšanu. pašreizējā situācijā pats augšējais parents zem sevis tur ~2000 bērnu (pārējiem lielākajiem parentiem aptuveni ~50), un šī parenta koka attēlošana aizņem diezgan pailgu laiku, kādas 15-20 sekundes viņš moca mysql'u. kā panākt ātrdarbīgāku šī koka attlēlošanu, jo lietotāju skaits aug. principā pārsvarā viss kas mainās tie ir punkti. man taisīt kešu un pārbaudīt vai bāzē ir punktu izmaiņas pirms ielādēt tabulu katru reizi no jauna vai taisīt kaut kādu laika ierobežojumu atļaujai ielādēt jaunākās izmaiņas? Link to comment Share on other sites More sharing options...
legalizeme Posted February 20, 2007 Report Share Posted February 20, 2007 man tas datums šķietās - vispirms $a = explode(" ", $datums) un pēc tam $cipariņi=explode(":" vai "-" vai kastur.., $a[0] vai $a[1] .. $a[n]) .. nu ceru ka doma noķerta.. Link to comment Share on other sites More sharing options...
legalizeme Posted February 20, 2007 Report Share Posted February 20, 2007 unn... man mācija, ka visērtāk laika vienības datubāzē noglabāt kā timestamp`u ... ja nemaldos vienkārši - $laiks = time() un tiek iegūts tas garais cipars sekundēs. Pēc tam velkot ārā no db viņējo - ērti manipulēt.. pārveidot sev vajadzīgajā formātā Link to comment Share on other sites More sharing options...
andrisp Posted February 21, 2007 Report Share Posted February 21, 2007 Vēl labāk ir glabāt DATETIME formātā. Un kā jau Roze teica, izvelkot ārā, ar strtotime pārkonvertēt uz unix timestamp ar ko var viegli manupilēt. Link to comment Share on other sites More sharing options...
Grey_Wolf Posted February 21, 2007 Report Share Posted February 21, 2007 (edited) andrisp --> nafig izmantot PHP ja ir UNIX_TIMESTAMP( datuminsh) --------- Datuma salidzinaashanai etc: ir DATE( datuminsh ) ja vajag lai iekljautu gan sakuma dienu gan beigu datumu tad... SELECT * FROM tabulis WHERE date( datuminsh ) > DATE_ADD( '2000-10-10', INTERVAL -1DAY ) AND date( datuminsh ) < DATE_ADD( '1900-11-11', INTERVAL 1 DAY) shadi buus gan aatraak gan preciizaak... Un izmantojiet Tachu MySql piedaavaataas iespeejas... (un to ir LJOTI daudz...) Roze iedeva preciizu linku paskataties tachu .... Edited February 21, 2007 by Grey_Wolf Link to comment Share on other sites More sharing options...
andrisp Posted February 21, 2007 Report Share Posted February 21, 2007 (edited) Grey_Wolf, kāpēc tos date_add ? Nebūs tas pats, kas ? : SELECT * FROM tabulis WHERE date( datuminsh ) <= '2000-10-10' AND date( datuminsh ) >= '1900-11-11' Edited February 21, 2007 by andrisp Link to comment Share on other sites More sharing options...
v3rb0 Posted February 21, 2007 Report Share Posted February 21, 2007 bez tiem date_add tad laikam date( datuminsh ) <= '2000-10-09' AND date( datuminsh ) >= '1900-11-12' būs bet imho tomēr labāk ir php pusē izrēķināt no kura līdz kuram datumam tad tev īsti vajag (db tāpat ir daudz ko darīt, nevajag viņai uzkraut vēl datumu pārrēķināšanu tikai tāpēc, ka mysql ir daudz f-jas datumiem) Link to comment Share on other sites More sharing options...
Grey_Wolf Posted February 21, 2007 Report Share Posted February 21, 2007 bet imho tomēr labāk ir php pusē izrēķināt no kura līdz kuram datumam tad tev īsti vajag Aga ja tev ir 100K ierakstu un vajag atlasiit peec 2 dienaam ... Savaacam VISU un tad megjinam tikt skaidriibaa ;) Link to comment Share on other sites More sharing options...
v3rb0 Posted February 21, 2007 Report Share Posted February 21, 2007 jā jā, select * from table1, table2, .. tableN, visu sessijā un tad lasam ārā ko vajag! :) takš ne tā un ne tādā gadījumā, domāts bija ka ar php sarēķinam intervālus kuros meklēt, jo čupai ierakstu ar datumiem izmalt cauri salīdzināšanu un datumu f-jas būs lenāk nekā taij pašai čupai ierakstu izmalt cauri tikai salīdzināšanu, vienalga cik gudri un viltīgi db datumu f-jas apstrādās. Link to comment Share on other sites More sharing options...
Grey_Wolf Posted February 21, 2007 Report Share Posted February 21, 2007 domāts bija ka ar php sarēķinam intervālus kuros meklēt, hmm nesapratu tavu domu :( kaa tu ar PHP sarekjinaasi intervaalu? ko ieguusi rezultaataa... kaa UNIXTime... ? Link to comment Share on other sites More sharing options...
v3rb0 Posted February 21, 2007 Report Share Posted February 21, 2007 (edited) visa matemātika pavisam vienkārša, šito nelaimīgo kveriju SELECT * FROM tabulis WHERE date( datuminsh ) > DATE_ADD( '2000-10-10', INTERVAL -1DAY ) AND date( datuminsh ) < DATE_ADD( '1900-11-11', INTERVAL 1 DAY) var arī šitā rakstīt, ja datuminsh lauks ir date* tipa $sql = 'SELECT * FROM tabulis WHERE datuminsh > \''.date(...).'\' AND datuminsh < \''.date(...).'\'' vai ja datuminsh lauks ir unixtimestamps $sql = 'SELECT * FROM tabulis WHERE datuminsh > '.strtotime(...).' AND datuminsh < '.strtotime(...) imho tā db būs vieglāk viņu izpildīt. Edited February 21, 2007 by v3rb0 Link to comment Share on other sites More sharing options...
Recommended Posts