08. juni 2003 - 23:32Der er
54 kommentarer og 2 løsninger
mySQL/PHP - opbevaring af fødselsdags dato
Jeg skal have en række i en af mine tabllen, som angiver hvornår en person er født. Mit spørgsmål er nu, hvilken format der er bedst til dette formål.
Jeg skal bruge fødselsdagsdatoen, vil at angive personens alder, og jeg skal have mulighed for at mange en system hvor man kan søge i databasen, og finde personer med en valgt alder.
Hvilket formal foreslår i at jeg bruger, og hvad er smartest?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
$query = mysql_query("SELECT YEAR(felt) as year, MONTH(felt) as month, DAYOFMONTH(felt) as day FROM tabel WHERE kolonne='noget'"); while ($row = mysql_fetch_array($query)) { echo alder ($row['year'],$row['month'],$row['day']). " år gammel<br>"; } ?>
Undskyld.. Jeg er ikke helt med! For at lave det smarteste system, hvordan skal datoen da engives i min database? Skal man have et kolonne til både dag, måned og år, eller skal man blot bruge et felt, hvor datoen bliver angivet? Dette kunne f.eks. gøres med time()!?
For så vil det jo være meget nemt f.eks. at finde de rækker i tabellen, hvor alder f.eks. er under 10. Så siger man jo bare noget i retningen af: WHERE birtyday < time()-10år
Nej, normalt gør den ikke! Men jeg er alligevel nød til at give brugeren mulighed for at ændre sin fødselsdag (f.eks. hvis en anden person overtager brugeren)..
Men hvis du mener at de har indtastet forkert, og skal rette den så kan du bruge mit eksempel:
$query = mysql_query("SELECT YEAR(felt) as year, MONTH(felt) as month, DAYOFMONTH(felt) as day FROM tabel WHERE kolonne='noget'"); $row = mysql_fetch_array($query); $year = $row['year']; $month = $row['month']; $day = $row['day'];
I skal nok få flere point, end der er på bordet nu. Men jeg kan lige så godt få løst alle mine problemer ang. dette emne på samme tid.
Hvis vi nu antager at en bruger vælger at han/hun vil søge i brugere som har en alder fra 15-16, hvordan kan jeg så gøre det udfra det tal jeg har i kolonnen (f.eks 1987-01-23)?
Da jeg kun benytter de indbyggede funktioner i MySQL regner jeg stærkt med at der bliver taget højde for skudår - ellers ville jeg da være pænt skuffet over de folk der sidder og koder MySQL :-)
Så vidt jeg kan gennemskue er der ikke nogle huller/bugs i den sql-forespørgsel jeg har læsset af...
Rettelse - efter jeg begyndte argumentationen kunne jeg se der var problemer - fandt frem til følgende forenkling og forstår egentlig ikke det fungerede tidligere... (har samme sql-sætning kørende herhjemme og selv på dagen passede det!)
Dette alene fungerer fint, hvis man HAR haft fødselsdag i indeværende år - i eksemplet ovenfor er personen 18 år, men kun, hvis personen har haft fødselsdag i 2003 - derfor skal der trækkes 1 år fra, hvis vedkommende ikke har haft fødselsdag endnu i indeværende år, hvilket nedenstående sørger for!
Bemærk at det resultatet (0 eller 1) af den logiske test > der fratrækkes - hvis venstresiden (dags dato) er større end højresiden (fødselsdag), betyder det at personen har haft fødselsdag og der skal ikke fratrækkes noget - da udtrykket så er sandt returnerer det 0 og der trækkes ikke noget fra! Hvis udtrykket er falsk, dvs. højresiden er størst og personen endnu ikke har haft fødselsdag fratrækkes 1 (som svarer til falsk) og vi får alt i alt personens korrekte alder!
Det hele hænger altså på den lille korrektion der ser på om personen har haft fødselsdag eller ej i indeværende år - og den udnytter at mysql returnerer 0 eller 1 afhængig af om et udtryk er sandt eller falsk.
Meget rart lige at kommentere svaret, så jeg kunne finde mine fejl :-)
Jeg har problemer med den funktion du lavede i "09/06-2003 16:09:18". Mine fødselsdagsdato ligger nu i: birthdate_day, birthdate_month og birthdate_year.
Din funktion er laver til at det ligger i samme felt! Hvordan får jeg funktionen til at virke?
$mysql = mysql_query("SELECT username, DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birthdate, '%Y') - (DATE_FORMAT(CURDATE(), CONCAT(YEAR(CURDATE()),'-%m-%d')) <= DATE_FORMAT(birthdate, CONCAT(YEAR(CURDATE()), '-%m-%d'))) + 1 AS bdayage FROM users WHERE $search ORDER BY username ASC");
Hvad skal jeg indsætte i denne, for at få værdien af birthdate_day, birthdate_month og birthdate_year over i birthdate.. Kan jeg gøre noget ala: "birthdate_year-birthdate_month-birthdate_day" AS birthdate ?
Hvordan gør jeg det med CONCAT, som du snakkede om? Tror det vil være noget nemmere i mit tilfælde!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.