Lord Posted March 4, 2011 Report Share Posted March 4, 2011 (edited) Sveiki! 1) LABOTS: 1. ir sanācis, paldies mounkuls. Tagad cīnos ar pārējiem diviem punktiem. 2) Veidoju lapas ierakstu arhīvu. Arī viss sanāk, taču jautājums ir, kā pastāstīt kodam, lai sarakstā neliek divus vienādus ierakstus, ja tie veikti vienā mēnesī, bet atstāj tikai vienu. Tas ir, lai sarakstā nebūtu, piemēram, divi February, 2010, ja tajā laikā veikti divi ieraksti. <?php //START archives SCRIPT $articlea = mysql_query("SELECT * FROM articles ORDER BY date ASC"); while ($archive = mysql_fetch_array($articlea, MYSQL_ASSOC)) { $archdate = '' . date('F Y',$archive['date']) . ''; $archlinkdate = '' . date('Y-m',$archive['date']) . ''; echo "<p><ul>"; echo "<li><a href=\"http://site.lv/index.php?archive=$archlinkdate\">$archdate</a></li>"; echo "</ul></p>"; }?> 3) Pēcāk ar $_GET taisos dabūt to 'archive' parametru, taču viņš būs formā, piemēram, 2010-02. Kā var dabūt atpakaļ to datumu uz sekundēm? Man datu bāzē visiem ierakstiem norādītas sekundes, kad ieraksts veikts. Droši vien tad pie tā 2010-02 attiecīgi pieskaitīšu 28 dienas un ar mysql query likšu atrast visu, kas ir veikts no 2010-02-01 līdz 2010-02-28. Tas būtu labākais variants? 2010-02 lieku GETā tāpēc, lai links izskatītos foršāk un lietotājam saprotamāk; ja ir kādi citi varianti, kā var padot GETā sekunžu skaitu, bet beigās, teiksim, ar .htaccess, pārveidojot URL, parādīt linkā datumu Y-m formā, būtu jauki, ja kāds par to pastāstītu. Paldies! Edited March 5, 2011 by Lord Quote Link to comment Share on other sites More sharing options...
mounkuls Posted March 5, 2011 Report Share Posted March 5, 2011 1. Tāpēc, ka POST datus paņem un veic INSERT jau tikai pēc visa. 2. Ar parastu IF būs vien jāpārbauda vai tajā mēnesī ieraksta nav, palūrot datubāzē. 3. Te nu varianti ir dažādi. GETā nebūtu liela jēga, bāzē gan arī ne, likt sekundes, ja to ieraksu drīkst būt tikai 1/mēnesī. Laika formāti ir vairāki. PHP ir time() funkcija, varbūt der pat date(), ja jau tikai viens ieraksts mēnesī. SQL ir ērti likt iekšā ar NOW(), un pat SELECT laukā tad var iznākt ērtāk. Ar .htaccess tādiem mērķiem gan neiesaku aizrauties, ņemot vērā, ka to var PHP turpat bez problēmām paveikt. Ja ko sajauksi,testējot vismaz atradīsi pēc faila kur ziepes. Quote Link to comment Share on other sites More sharing options...
Lord Posted March 5, 2011 Author Report Share Posted March 5, 2011 (edited) Paldies par atbildi! 1) sanāca, paldies. 2) Ja nav ierakstu tajā mēnesī, tas jau automātiski tiek atlasīts, bet kā rīkoties, ja ir divi vai vairāk? Tad man sarakstā parādās vairāki vienādi mēneši, piemēram: January 1970 March 1970 February 1971 February 1971 February 1971 June 1971 Tam IFam vajadzētu būt if(tāds mēnesis eksistē vairākiem rakstiem){ rakstīt mēnesi sarakstā tikai vienu reizi }, taču man nav ideju, kā tādu izgatavot. 3. vēl neesmu izmēģinājis, taču tūlīt ķeršos klāt. Edited March 5, 2011 by Lord Quote Link to comment Share on other sites More sharing options...
mounkuls Posted March 5, 2011 Report Share Posted March 5, 2011 2. Nuuuu, man tas arī bija pats neskaidrākais punkts Tavai idejai..., jo: * SQL pusē ir samērā labi visas lietas ar laika funkcijām, sevišķi ja pa rupjam ko vajag atlasīt. * ja pareizi noprotu, Tev patreiz gadu un mēnesi glabā atsevišķās kolonnās, kas nav īpaši gudri. * ja glabātu piemēram PHP timestamp, tas būtu tas laiks sekundēs, taču kopš 1970. gada tiko sākta Jaunā Gada, jeb 1. janvārā 00:00. Paštuko par šo visu un tad jau izdomāsi ko īsti ir labāk, sevišķi tad, ja ir plānots tur ko bīdīt arī tālāk uz priekšu lai paplašinātos, kad tas mēnesis kā intervāls ierakstam īsti var arī nederēt. Quote Link to comment Share on other sites More sharing options...
mounkuls Posted March 5, 2011 Report Share Posted March 5, 2011 Tam IFam vajadzētu būt if(tāds mēnesis eksistē vairākiem rakstiem){ rakstīt mēnesi sarakstā tikai vienu reizi }, taču man nav ideju, kā tādu izgatavot. Te nebūs tā vienkarši, atkarīgs ko vēlies tajā IF nosacījumā. Jo rakstīt tikai vienu reizi nozīmē: * pārbaudīt vai ir jau ierakst tajā mēnesī * izlemt ko darīt ar tiem ierakstiem, kuri ir * izdarīt to (nerakstīt jaunu/dzēst esošo vai esošos). Quote Link to comment Share on other sites More sharing options...
Lord Posted March 5, 2011 Author Report Share Posted March 5, 2011 Nē, nē, nē, man datu bāzē tiek glabāts tajās sekundēs, tad es ar $archdate = '' . date('F Y',$archive['date']) . ''; pārveidoju tās sekundes uz, piem., February 2010 formātu, taču man listā tādi parādās vairāki, ja tajā mēnesī ir vairāki izveidoti raksti. Mērķis ir tāds, ka no January 1970 March 1970 February 1971 February 1971 February 1971 June 1971 tiek dabūts January 1970 March 1970 February 1971 June 1971 Pēc uzspiešanas uz kādu no mēnešiem tiek atlasīti raksti attiecīgajā mēnesī. Tieši tad arī tiek parādīti tie trīs raksti, kas bija 1971. gada februārī. Bet kā tieši ar to IFu pateikt, lai tiek novākti tie liekie divi(tas ir šajā piemēra gadījumā) February 1971? Quote Link to comment Share on other sites More sharing options...
mounkuls Posted March 5, 2011 Report Share Posted March 5, 2011 (edited) Nu to jau īstenībā pareizāk darīt būs nevis ar IFu, bet uzreiz SQL vaicājumā kā intervālu, tad atlasīs tikai to, kuru prasīsi:) Plus tur arī varēsi uzlikt papildu kādu vēl nosacījumu, ja to vajadzēs. Un tieši tāpēc iesaku apgūt vairāk par SQL laika fukcijām. Tad sāksi saprast kāpēc foršāk ir likt INSERTojot laiku ar SQL, piemēram NOW() Edited March 5, 2011 by mounkuls Quote Link to comment Share on other sites More sharing options...
Lord Posted March 5, 2011 Author Report Share Posted March 5, 2011 (edited) Tas laikam vairāk attiecināms uz to trešo punktu, taču neskaidrības ir ar otro. Es īsti nezinu, kā lai izstāstu lielo sāpi. Man datu bāzē ir kaudze ar rakstiem, kuriem katram ir savs izveidošanas laiks. Lai izveidotu skatāmu arhīvu, izvelku laiku, pārveidoju to "F Y" formātā un padodu to <li> sarakstā, tātad šādi: January 1970 March 1970 February 1971 February 1971 February 1971 June 1971 Taču gadās(kā arī parādīts augstāk), ka vienā mēnesī ir uzrakstīti vairāki raksti, bet mērķis ir katru mēnesi norādīt sarakstā tikai vienu reizi. Tātad kaut kā ar if būtu jāpanāk, ka if(F Y kādam rakstam == F Y vēl kādam rakstam){ pasniegt <li> šim attiecīgajam F Y tikai vienu reizi, nevis tik, cik reāli rakstu tajā laikā ir }. Tātad pēc if augstāk minētajam sarakstam jāparādās: January 1970 March 1970 February 1971 June 1971 Edited March 5, 2011 by Lord Quote Link to comment Share on other sites More sharing options...
Lord Posted March 5, 2011 Author Report Share Posted March 5, 2011 Joprojām ar šo pašu padarīšanu ņemos, nekādi netieku galā. Varbūt vēl kādam ir idejas, kā panākt rezultātu? Quote Link to comment Share on other sites More sharing options...
m8t Posted March 5, 2011 Report Share Posted March 5, 2011 Šķiet, ka nosūtīju tev jau risinājumu. Kas tajā nestrādāja? Quote Link to comment Share on other sites More sharing options...
Lord Posted March 5, 2011 Author Report Share Posted March 5, 2011 m8t, varbūt es to nepareizi izmantoju, bet January 1970 March 1970 February 1971 February 1971 February 1971 June 1971 gadījumā lapā uzrādās January 1970 January 1970 January 1970 January 1970 January 1970 January 1970 Varbūt, ja Tu ienāktu Skype, es varētu atrakstīt precīzi, kādā veidā kods tiek ievietots. Quote Link to comment Share on other sites More sharing options...
mounkuls Posted March 5, 2011 Report Share Posted March 5, 2011 Ja Tev nav būtiski kuru ierakstu ņemt, kas atbilst February 1970, tad vienkārši SQL vaicājumam uzliec LIMIT 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.