Avatar billede hrole Mester
15. november 2019 - 23:51 Der er 1 kommentar og
1 løsning

Sortering på dato med identiske keys

Hej,

Jeg trækker datoer ud fra to databaser (med fødselsdage og møder), disse kan falde på samme dato. Hvordan får jeg dem vist?

Følgende haves:

$this_year = date("Y");
$next_year = date('Y', strtotime('+1 year'));

$interval_date = date('Y-m-d', strtotime(date("Y-m-d"). ' +5 month'));

$qry_cal = "
SELECT birthday AS sorter, birthday, NULL AS date, first AS beskr FROM all_users
UNION ALL
SELECT date AS sorter, NULL AS birthday, date, description AS beskr FROM calender_".$this_year." WHERE date > CURDATE()
UNION ALL
SELECT date AS sorter, NULL AS birthday, date, description AS beskr FROM calender_".$next_year." WHERE date > CURDATE()
ORDER BY MONTH(sorter), DAY(sorter), YEAR(sorter) ASC";
$result_cal = mysqli_query($dbc, $qry_cal);

$date2 = array();
while ($row = mysqli_fetch_array($result_cal)) {
    if (!empty($row['birthday'])) {
        $now = time();
        $dob = strtotime($row['birthday']);
        $birthd = explode("-", $row['birthday']);
        $dob_thisyear = date("Y").'-'.$birthd[1].'-'.$birthd[2];
        $difference = $now - $dob;
        $age = floor($difference / 31556926)+1;
       
        $day = date("d-m-Y", strtotime($row['birthday']));
        if ($dob_thisyear >= date("Y-m-d")) {
            $dob_next = $dob_thisyear;
        } else {
            $year_next = date('Y', strtotime('+1 year'));
            $dob_next = $year_next.'-'.$birthd[1].'-'.$birthd[2];
        }
        if ($dob_next <= $interval_date) {
            $date2[$dob_next] = ' <img src="danneb.png" height="20" width="20">&nbsp;&nbsp;'.$row['beskr'].' '.($age).' år';
        }
    }
   
    if (!empty($row['date'])) {
        if ($row['date'] <= $interval_date) {
            $date2[$row['date']] = ' <img src="calendar.png" height="20" width="20">&nbsp;&nbsp;'.$row['beskr'];
        }
    }

}

ksort($date2);

foreach ($date2 as $d => $b) {
    echo $d.'-'.$b.'<br>';
}
Avatar billede claes57 Ekspert
16. november 2019 - 08:26 #1
nu er jeg ikke php-koder, men
træk fødselsdage ud i arr1, og møder i arr2.
læs dato for post i arr1
loop:
indre loop1: læs post i arr2 og udskriv sålænge dato her er < arr1
indre loop2: udskriv arr1 sålænge dato er <= arr2
loop slut
til sidst tømmes den af arr1/arr2, der stadig indeholder data (hvis du i indre loop sætter dato til om 100 år når arr1/arr2  går EOF, så tømmes begge der).

her vil møder stå før fødselsdage hver gang, og der kan være flere af hver på samme dag (pga forskellen i < og <=)
Avatar billede hrole Mester
16. november 2019 - 22:17 #2
Tak!
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

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