如果有超过1个事件,如何正确完成我的日历?

I need some help for display the events when there is more than 1.

Currently my calendar looks like that:

enter image description here

I've done a while for each events but I don't know how to tell to PHP to do the others events and not repeat the same one 2 or 3 times like on the screenshot.

Here is my current code: (working perfectly with only 1 event per person)

$chresult = mysql_query("SELECT * FROM personnel WHERE masquer=0 ORDER BY lastname");

$z = 0;
while ($z < mysql_num_rows($chresult)) {
    $lastname = $donnees['lastname'] = mysql_result($chresult, $z, 'lastname');
    $firstname = $donnees['firstname'] = mysql_result($chresult, $z, 'firstname');
    $personnel_id = $donnees['personnel_id'] = mysql_result($chresult, $z, 'personnel_id');

    $abresult = mysql_query("SELECT motif, date_start, date_end FROM absence WHERE personnel_id='$personnel_id' AND date_start>='$startmonth' AND date_end<='$endmonth' ORDER BY id DESC");
    $rowabsence = mysql_fetch_row($abresult);

    $resultcountpersonnelabsent=mysql_query("SELECT COUNT(*) AS nombre FROM absence WHERE personnel_id='$personnel_id' AND date_start>='$startmonth' AND date_end<='$endmonth' ORDER BY id DESC");
    $number=mysql_result($resultcountpersonnelabsent, 0, 'nombre');

    if($number == 0) {

    }
    else {

        echo "<TR>";
        echo "<TD><span class=\"label label-default\">$lastname $firstname</span></TD>";

        $w = 0;
        while ($w < $number) {

            $explode_date_start=explode('-',$rowabsence[1]);

            $explode_date_end=explode('-',$rowabsence[2]);

            $numberofdays = $explode_date_end[2] - $explode_date_start[2];

            $explode_end_month=explode('-',$endmonth);

            $a = 1;
            while ($a < $explode_date_start[2]) {
                echo "<TD></TD>";
                $a++;
            }

            $b = -1;
            while ($b < $numberofdays) {
                echo "<TD bgcolor=\"$color\"></TD>";
                $b++;
            }

            $c = $explode_date_end[2];
            while ($c < $explode_end_month[2]) {
                echo "<TD></TD>";
                $c++;
            }
            $w++;
        }
        echo "</TR>";
    }
    $z++;
}

EDIT: Translated PHP code from French to English.

P.S: When this will be fully working I will upload the full source if requested.