Avatar billede tjensen Nybegynder
19. december 2004 - 19:32 Der er 7 kommentarer og
1 løsning

Opstilling af kommende fødselsdag

Hey'sa!

Jeg har problemer med at få stillet det rigtig op. Skal have scripted til at udskrive de 5 næste fødselsdage.
Lige nu udskriver den ikke dem som har fødselsdag i det indeværende år.

<?php
include "funktion/db.php";
$sql = mysql_query("SELECT fornavn, efternavn, Year(NOW())-YEAR(fdag)+1 AS alder, DATE_FORMAT(fdag, '%d.%b') AS dato, DAYOFYEAR(fdag)-DAYOFYEAR(NOW()) AS doy FROM personer ORDER BY DAYOFYEAR(fdag)-DAYOFYEAR(NOW()) ASC LIMIT 5");
#$sql = mysql_query("SELECT fornavn, efternavn, fdag, Year(NOW())-YEAR(fdag) AS alder, DATE_FORMAT(fdag, '%d.%b') AS dato FROM personer ORDER BY DATE_FORMAT(fdag, '%m'), DATE_FORMAT(fdag, '%d') ASC LIMIT 5");
include "funktion/luk_db.php";
?>
<table id="fdag_main">
<?php
?>
  <tr>
    <td align="center"><b>5 næste fødselsdage:</b></td></tr>
<?php
while($row = mysql_fetch_array($sql) AND $row['doy'] >= 0) {
?>
  <tr>
    <td>
    <?php
      echo "&nbsp;{$row['fornavn']} {$row['efternavn']}<br>&nbsp;&nbsp;&nbsp;";
      if ($row['dato']==date("d.M")){
        echo "IDAG :)";
      }else{
        print $row['dato'];
      }
      echo "&nbsp;&nbsp;{$row['alder']} år";
      ?></td></tr>
<?php
}
while($row = mysql_fetch_array($sql) AND $row['doy'] <= -1) {
?>
  <tr>
    <td>
    <?php
      echo "&nbsp;{$row['fornavn']} {$row['efternavn']}<br>&nbsp;&nbsp;&nbsp;";
      print $row['dato'];
      echo "&nbsp;&nbsp;{$row['alder']} år";
      ?></td></tr>
<?php
}
?>
</table>
Avatar billede jakobdo Ekspert
19. december 2004 - 22:31 #1
Prøv evt at start med at brug denne sql-sætning:

SELECT
    fornavn,
    efternavn,
    fdag
FROM
    personer
WHERE
    fdag > NOW()
ORDER BY
    fdag
LIMIT
    5
Avatar billede jakobdo Ekspert
19. december 2004 - 22:31 #2
Den bør give dig de næste 5 fødselsdage...
Avatar billede tjensen Nybegynder
19. december 2004 - 22:41 #3
Det ville jeg ikke mene er nok. Hvad hvis NOW er 2004-12-19 og nogle har fdag til 1952-08-24 og en anden 1984-02-28 og en tredje 192-12-29...

Dette vil både give problemer med at rækkefølgen ikke skal drilles af årgang. Og hvem hvor mange har i år og så nogle næste år.

Men jeg tror selv jeg har fundet på noget.

<?php
include "funktion/db.php";
$iaar = mysql_query("SELECT fornavn, efternavn, Year(NOW())-YEAR(fdag)+1 AS alder, DATE_FORMAT(fdag, '%d.%b') AS dato, DAYOFYEAR(NOW())-DAYOFYEAR(fdag) AS doy FROM personer ORDER BY doy ASC");
$naesteaar = mysql_query("SELECT fornavn, efternavn, Year(NOW())-YEAR(fdag)+1 AS alder, DATE_FORMAT(fdag, '%d.%b') AS dato, DAYOFYEAR(fdag)-DAYOFYEAR(NOW()) AS doy FROM personer ORDER BY doy ASC");
include "funktion/luk_db.php";
?>
<table id="fdag_main">
  <tr>
    <td align="center"><b>5 næste fødselsdage:</b></td></tr>
<?php
$i = 0;
while($row = mysql_fetch_array($iaar) AND $i < 5) {
if ($row['doy'] <= 0){
?>
  <tr>
    <td>
    <?php
      echo "&nbsp;{$row['fornavn']} {$row['efternavn']}<br>&nbsp;&nbsp;&nbsp;";
      if ($row['dato']==date("d.M")){
        echo "IDAG :)";
      }else{
        print $row['dato'];
      }
      echo "&nbsp;&nbsp;{$row['alder']} år";
      ?></td></tr>
<?php
$i = ++$i;
}
}
while($row = mysql_fetch_array($naesteaar) AND $i < 5) {
if ($row['doy'] <= 0){
?>
  <tr>
    <td>
    <?php
      echo "&nbsp;{$row['fornavn']} {$row['efternavn']}<br>&nbsp;&nbsp;&nbsp;";
      print $row['dato'];
      echo "&nbsp;&nbsp;{$row['alder']} år";
      ?></td></tr>
<?php
$i = ++$i;
}
}
?>
</table>

Dette skulle vidst virke, og praktisk gør det det lige nu.

Ellers tak!

Men vil rigtig gerne hører hvis der er lettere måder!
Avatar billede jakobdo Ekspert
19. december 2004 - 22:55 #4
Hvad så med en sql i stil med:

SELECT
    fornavn,
    efternavn,
    fdag
FROM
    personer
WHERE
    MONTH(fdag) > MONTH(NOW())
AND
    DAY(fdag) > DAY(NOW())
ORDER BY
    MONTH(fdag),
    DAY(fdag)
LIMIT
    5
Avatar billede tjensen Nybegynder
19. december 2004 - 23:02 #5
Lyder simpelt og kunne være dejlig.. Men er det kompetibel med årskifte? Hvis der nu er en der har i år, og derefter kommer de 4 første næste år?
Avatar billede jakobdo Ekspert
20. december 2004 - 08:22 #6
Ok, jeg giver op! :o)
Jeg kan ikke lige tyde en løsning nu!
Avatar billede tjensen Nybegynder
20. december 2004 - 15:02 #7
Men tak for tanken og forsøget.. Tror også mit virker, syntes bare der må være en lettere måde.
Avatar billede tjensen Nybegynder
14. januar 2005 - 21:32 #8
lukke tid
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester