Jump to content
php.lv forumi

Recommended Posts

Posted

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

Posted

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.

Posted

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>';
}

Posted

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.

Posted

Aleksejs: VARCHAR(5) :)

 

bubu: Paldies, pamēģināšu :)

Posted

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?

Posted

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ā.

Posted

Š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?

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...