Jump to content
php.lv forumi

jubilāru izvilkšana


Pentiums

Recommended Posts

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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