Pentiums Posted April 22, 2009 Report Share Posted April 22, 2009 Sveiki. Gribu izvilkt nākamos 5 jubilārus (v/d un dz/d) abi glabājas unix timestamp laukos vārdadienai tikai pieglabāts 2000gads klāt :D Kā vislabāk izvilkt jubilāru sarakstu no db? Kādā formātā ieteicams glabāt datumu speciāli priekš jubilāru izvilkšanas? Priekš jubilāru izvilkšanas unix timestampā visiem useriem vajag glabāt gadu vienu un to pašu? piemēram visiem 2000 gads un taalaak datums... un kverijs buutu kautkaa tā? $today = strtotime('2000.04.22'); SELECT * FROM friends WHERE bday_unix = $today OR nday_unix = $today bet ja sis te straadaa, man rodas jautajums, kas ir ja ir decembris un vajag izvilkt ari dazus janvaara jubilaarus? tur jau vairs neiedarbojas šis WHERE nosacījums. ceru ka saprataat manus jautaajumus Quote Link to comment Share on other sites More sharing options...
bubu Posted April 22, 2009 Report Share Posted April 22, 2009 Nevajag glabāt gadu. Vajag glabāt tikai mēnesi un dienu. Un no vajadzīgā datuma php pusē izdabūt ārā mēnesi un dienu, kurus padot kverija nosacījumos. Quote Link to comment Share on other sites More sharing options...
xPtv45z Posted April 22, 2009 Report Share Posted April 22, 2009 Es izmantotu kādu no šīm - http://dev.mysql.com/doc/refman/5.1/en/dat...-functions.html Quote Link to comment Share on other sites More sharing options...
Pentiums Posted April 23, 2009 Author Report Share Posted April 23, 2009 Labdien. Lietotāju tabulā tagad ir lauki nday un bday, kuri satur datumus šādā formātā 05.23 (mēnesis.diena) Lai izvilktu nākamā mēneša jubilejas (vārdadienas un dzimšanas dienas) veicu šādu vaicājumu: SELECT friendship.*, friends.nday fnday, friends.bday fbday, friends.name fname, friends.surname fsurname, friends.id fid FROM friendship LEFT JOIN friends ON friends.id=friendship.friend WHERE (friendship.owner = 1) AND ((friends.bday >= 04.23 AND friends.bday <= 05.23) OR (friends.nday >= 04.23 AND friends.nday <= 05.23)) ORDER BY friends.bday AND friends.nday ASC Viss ir smuki un jauki, tikai ORDER BY niķojās, man agrāk likās, ka ORDER BY sakārto datus kuri tiek iegūti ar WHERE klauzu, bet izrādās ka nē :( Tātad problēma sekojoša: Ja lietotājam ir kāda dzimšanas diena vai vārda diena kas neiekļaujas šī WHERE mēneša starpā, pie ORDER BY arī tiek ņemta vērā, tāpēc tiek sajaukta visa kārtošanas secība, jo man vajag sakārtot ASC secībā pēc vārda dienas un dzimšanas dienas, lai izvadītu attiecīgi: 29.04 v/d Jānis Smits 03.05 dz/d Arnis Zarnis 13.05 v/d, 19.05 dz/d Skaidra Neskaidrīte BET, ja Jānim Smitam dzimšanas diena ir piemēram 22.08 tad viņš tiek nomests apakšā. Tātad, kā lai visu šito te izlabo? P.S ja kādam interesē, te arī PHP kods :) $q = mysql_query("SELECT friendship.*, friends.nday fnday, friends.bday fbday, friends.name fname, friends.surname fsurname, friends.id fid FROM friendship LEFT JOIN friends ON friends.id=friendship.friend WHERE (friendship.owner = ".$myinfo['id'].") AND ((friends.bday >= ".date('m.d')." AND friends.bday <= ".date('m.d', strtotime('next month')).") OR (friends.nday >= ".date('m.d')." AND friends.nday <= ".date('m.d', strtotime('next month')).")) GROUP BY friends.bday ORDER BY friends.bday AND friends.nday ASC"); while($data = mysql_fetch_array($q)) { echo '<span style="color: #999999;">'; if($data['fbday'] >= date('m.d') && $data['fbday'] <= date('m.d', strtotime('next month')) && $data['fnday'] >= date('m.d') && $data['fnday'] <= date('m.d', strtotime('next month'))) { if($data['fbday'] < $data['fnday']) { echo date('d.m', strtotime('2009-'.str_replace('.', '-', $data['fbday']))).' dz/d, '.date('d.m', strtotime('2009-'.str_replace('.', '-', $data['fnday']))).' v/d'; } else { echo date('d.m', strtotime('2009-'.str_replace('.', '-', $data['fnday']))).' v/d, '.date('d.m', strtotime('2009-'.str_replace('.', '-', $data['fbday']))).' dz/d'; } } else { if($data['fbday'] >= date('m.d') && $data['fbday'] <= date('m.d', strtotime('next month'))) { echo date('d.m', strtotime('2009-'.str_replace('.', '-', $data['fbday']))).' dz/d'; } else { echo date('d.m', strtotime('2009-'.str_replace('.', '-', $data['fnday']))).' v/d'; } } echo '</span> '.htmlspecialchars(stripslashes($data['fname'].' '.$data['fsurname'])).'<br>'; } Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted April 23, 2009 Report Share Posted April 23, 2009 Jāraksta nevis: ORDER BY friends.bday AND friends.nday ASC Bet gan ORDER BY friends.bday ASC, friends.nday ASC Quote Link to comment Share on other sites More sharing options...
Pentiums Posted April 23, 2009 Author Report Share Posted April 23, 2009 Nekas nemainās! :( Quote Link to comment Share on other sites More sharing options...
bubu Posted April 23, 2009 Report Share Posted April 23, 2009 Stringi 05.23 jāliek pēdiņas SQL vaicājumā, ja tev tajās kolonnās ir stringa formā dati. Citādi 05.23 tiks uzskatīts kā floats. Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted April 23, 2009 Report Share Posted April 23, 2009 Pag, kāds Tev kolonnām bday un nday ir datu tips? Quote Link to comment Share on other sites More sharing options...
Pentiums Posted April 23, 2009 Author Report Share Posted April 23, 2009 Aleksejs: VARCHAR(5) :) bubu: Paldies, pamēģināšu :) Quote Link to comment Share on other sites More sharing options...
Pentiums Posted April 23, 2009 Author Report Share Posted April 23, 2009 Rādās, ka tagad iet viss OK :) tikai tagad lai tuvākās jubilejas būtu augšpusē ir jāizmanto DESC, kāpēc tā? Tā tam jābūt? Quote Link to comment Share on other sites More sharing options...
Pentiums Posted April 23, 2009 Author Report Share Posted April 23, 2009 nē tomēr neiet kā vajag Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted April 23, 2009 Report Share Posted April 23, 2009 Pentium, izņemot iemeslu, ka "tā likās vienkāršāk" vari paskaidrot, kādēļ šādā veidā glabā datumus? (~; Tad jau labāk būtu divus Integer laukus taisījis - menesis un diena. Bet visnormālāk būtu bijis izmantot šim nolūkam domāto date tipu. Tad varētu arī atrast visus tos, kam dzimšanas diena šogad iekrīt piektdienā. Quote Link to comment Share on other sites More sharing options...
Pentiums Posted April 23, 2009 Author Report Share Posted April 23, 2009 Šajos divos laukos datumus glabāju tikai priekš šī mērķa un jā, tā likās vienkāršāk izdabūt datus ārā salīdzinot, jo googlē atrastie piemēri par upcoming birthdays sajauca galvu :( Tad kādā laukā man glabāt to datumu šim mēŗķim galugalā? DATE, TIMESTAMP, DATETIME vai TIME? 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.