2013-11-25 5 views
2

я решил несколько месяцев назад проблему получения данных из двух таблиц и сделать календарь событий. Вы можете посмотреть здесь: original question. Теперь я хочу что-то еще: я хочу объявить событие для КАЖДОГО пользователя в одно и то же время. Предположим, это праздник (например, Рождество), и я хочу добавить это событие для всех пользователей. Сначала я использую два запроса, чтобы выбрать праздники, а затем выбрать, будет ли пользователь присутствовать. Если присутствует tip_id = 0, если не tip_id = 1. Чем я помещаю все в таблицу. Если днем ​​является суббота или воскресенье, цвет серый (с использованием css1), если пользователь присутствует, цвет ячейки белый, и если пользователь отсутствует, цвет красный. Что мне нужно? Если у меня есть Праздники в этом месяце, мне нужно, чтобы цвет ячеек был серым (как в субботу, так и в воскресенье). Я пробовал разные идеи, но или смог получить серый ТОЛЬКО первый день праздника, или ТОЛЬКО последний, или я получил ошибку, когда в этом месяце нет праздников. Код (извлеченный только та часть, где мне нужна помощь), как это:Добавить событие в календаре

$db_luna=11; 
$db_an=2013; 
$days_in_month = 31; 

mysql_select_db($database_dbconfig, $dbconfig); 
$query_Holidays = "SELECT substring(data,9,2) AS zile_sarbatoare, data FROM sarbatori WHERE sarbatori.`data` LIKE '".$db_an."-".$db_luna."-%' ORDER BY zile_sarbatoare"; 
$Holidays = mysql_query($query_Holidays, $dbconfig) or die(mysql_error()); 
$row_Holidays = mysql_fetch_assoc($Holidays); 
$totalRows_Holidays = mysql_num_rows($Holidays); 

mysql_select_db($database_dbconfig, $dbconfig); 
$query_Presence = "SELECT c.full_name, c.id_personal, COALESCE(MIN(CASE WHEN CONCAT($db_an, '-', $db_luna, '-01') BETWEEN start_date AND end_date THEN tip_id END),0) '1', COALESCE(MIN(CASE WHEN CONCAT($db_an, '-', $db_luna, '-02') BETWEEN start_date AND end_date THEN tip_id END),0) '2', COALESCE(MIN(CASE WHEN CONCAT($db_an, '-', $db_luna, '-03') BETWEEN start_date AND end_date THEN tip_id END),0) '3', COALESCE(MIN(CASE WHEN CONCAT($db_an, '-', $db_luna, '-04') BETWEEN start_date AND end_date THEN tip_id END),0) '4', COALESCE(MIN(CASE WHEN CONCAT($db_an, '-', $db_luna, '-05') BETWEEN start_date AND end_date THEN tip_id END),0) '5' FROM calendar c"; 
$Presence = mysql_query($query_Presence, $dbconfig) or die(mysql_error()); 
$row_Presence = mysql_fetch_assoc($Presence); 
$totalRows_Presence = mysql_num_rows($Presence);} 



<?php do { ?> 
     <tr> 
      <td><?php echo $nr_crt, '. ' , $row_Presence['full_name']; ?></td> 
       <?php   
       $css1 = 'white'; 
       $trim = ''; 
        for ($a = 1; $a <= $days_in_month; $a++){ 
         $data_calculata = date("Y-m-d",mktime(0,0,0, $db_luna, $b, $db_an)); 
          if ($row_Presence[$a] == 0) {$legend = $row_Presence['full_name']."".$a; 
                 $day_of_week = date("N",mktime(0,0,0, $db_luna,$a ,$db_an)); 
                 if ($day_of_week == 6 OR $day_of_week == 7) {$css1 = 'grey';} 
                 else {$css1 = 'white';} 
          if ($row_Presence[$a] == 1) {$css1 = 'red'; $legend = $row_Presence['full_name']." - Absent";} 
         echo '<td " title= "'.htmlspecialchars($legend).'" class='.$css1.'></td>'; 
         $nr_crt = $nr_crt + 1; 
       ?>   
     </tr>    
    <?php } while ($row_Presence = mysql_fetch_assoc($Presence)); ?> 
    </table> 
+1

Это лучше указать тип в таблице событий и установить его на «все», вместо ввода записи для каждого пользователя. При выборе вы можете получить это условие, например WHERE type = 'ALL' ИЛИ ​​user_id = 10. Это просто предложение, подтвердите свое требование – Damodaran

ответ

0

Решение, которое я нашел, как это:

$db_luna=11; 
$db_an=2013; 
$days_in_month = 31; 

mysql_select_db($database_dbconfig, $dbconfig); 
$query_Holidays = "SELECT substring(data,9,2) AS zile_sarbatoare, data FROM sarbatori WHERE sarbatori.`data` LIKE '".$db_an."-".$db_luna."-%' ORDER BY zile_sarbatoare"; 
$Holidays = mysql_query($query_Holidays, $dbconfig) or die(mysql_error()); 
$totalRows_Holidays = mysql_num_rows($Holidays); 
$days_holidays = array(); 
while ($row_Holidays = mysql_fetch_array($Holidays)) 
{ 
    $days_holidays[] = $row_Holidays['zile_sarbatoare']; 
} 
// so, now I have an array with all the days I need 

mysql_select_db($database_dbconfig, $dbconfig); 
$query_Presence = "SELECT c.full_name, c.id_personal, COALESCE(MIN(CASE WHEN CONCAT($db_an, '-', $db_luna, '-01') BETWEEN start_date AND end_date THEN tip_id END),0) '1', COALESCE(MIN(CASE WHEN CONCAT($db_an, '-', $db_luna, '-02') BETWEEN start_date AND end_date THEN tip_id END),0) '2', COALESCE(MIN(CASE WHEN CONCAT($db_an, '-', $db_luna, '-03') BETWEEN start_date AND end_date THEN tip_id END),0) '3', COALESCE(MIN(CASE WHEN CONCAT($db_an, '-', $db_luna, '-04') BETWEEN start_date AND end_date THEN tip_id END),0) '4', COALESCE(MIN(CASE WHEN CONCAT($db_an, '-', $db_luna, '-05') BETWEEN start_date AND end_date THEN tip_id END),0) '5' FROM calendar c"; 
$Presence = mysql_query($query_Presence, $dbconfig) or die(mysql_error()); 
$row_Presence = mysql_fetch_assoc($Presence); 
$totalRows_Presence = mysql_num_rows($Presence);} 



<?php do { ?> 
    <tr> 
     <td><?php echo $nr_crt, '. ' , $row_Presence['full_name']; ?></td> 
      <?php   
      $css1 = 'white'; 
      $trim = ''; 
       for ($a = 1; $a <= $days_in_month; $a++){ 
        $data_calculata = date("Y-m-d",mktime(0,0,0, $db_luna, $b, $db_an)); 
        if ($row_Presence[$a] == 0) {$legend = $row_Presence['full_name']."".$a; 
                $day_of_week = date("N",mktime(0,0,0, $db_luna,$a ,$db_an)); 
          $css1 = 'white';               
         if ($day_of_week == 6 OR $day_of_week == 7) {$css1 = 'grey';} 
         if (in_array($a, $days_holidays)) {$css1 = 'grey';} //here I compare each day if it is in the array 
        if ($row_Presence[$a] == 1) {$css1 = 'red'; $legend = $row_Presence['full_name']." - Absent";} 
        echo '<td " title= "'.htmlspecialchars($legend).'" class='.$css1.'></td>'; 
        $nr_crt = $nr_crt + 1; 
      ?>   
    </tr>    
<?php } while ($row_Presence = mysql_fetch_assoc($Presence)); ?> 

Для меня это работает! Идея использовать функцию «in_array» исходит из другого вопроса с этого сайта. Спасибо StackOverflow :)

Смежные вопросы