Сравнение дат в codeigniter и mySQL - PullRequest
0 голосов
/ 29 июня 2011

Я совершенно вне себя от того, что не могу понять это сам, и прочитал каждую статью, которую могу достать, но, увы, все еще ничего.Так что я надеюсь, что кто-то может помочь.

У меня есть стол с Шоу.Он имеет четыре временных поля show_start (ЧЧ: ММ AM / PM), show_end (ЧЧ: ММ AM / PM), show_start_actual (ЧЧ: ММ: СС), show_end_actual (ЧЧ: ММ: СС),Также у меня есть 7 столбцов, названных по дням недели (воскресенье, понедельник и т. Д.).Дни недели равны 1 или 0, чтобы указать, будет ли шоу в этот определенный день.Столбцы actual содержат 24-часовой формат времени, остальные поля - varchar.

Я пытаюсь отменить шоу, которое сейчас воспроизводится.Время довольно простое (то есть с 6:00 до 10:00 и т. Д.). Я пробовал это на PHP и MySQL, но ничего не делал.Я уверен, что есть простое решение для этого.

Это мое текущее представление, которое сравнивает времена в PHP, но я думаю, что было бы более эффективно, если бы я мог на самом деле тянуть егоназад в mySQL.

Модель

function on_air()
{
    $current_time = $this->convert_to_hour(date('g:i a',now()));
    $current_day_of_week = strtolower(date('l',now()));

    $mySQL = $this->db->query("SELECT * FROM on_air_now");

    if($mySQL->num_rows() > 0 ){
        $mySQL = $mySQL->result();  
        foreach($mySQL as $row){

            eval('$db_day_of_week = $row->'.$current_day_of_week.';');
            $show_start = $this->convert_to_hour($row->show_start);
            $show_end = $this->convert_to_hour($row->show_end);

            if($current_time > $show_start && $current_time < $show_end && $db_day_of_week == 1){
                // If true then go at the show tables to  get info...
            }

        }
    }else{
        return FALSE;
    }
}

function convert_to_hour($str){
    $temp_arr = explode(":",$str);
    $arr_cnt = count($temp_arr)-1;
    $hour = $temp_arr[0];
    $min = explode(" ",$temp_arr[$arr_cnt]);
    $ampm = $min[1];
    if($ampm == 'pm' || $ampm == 'PM'){
        if($hour !== '12'){
        $hour = $hour+12;
        }
    }else{
        if($hour == '12'){
            $hour = 0;
        }
    }
    $new_time = $hour;
    return $new_time;
}

Обновление с данными:

id,"datetime","show_name","sub_name","show_start","show_end","show_start_actual","show_end_actual","day_of_week",sunday,monday,tuesday,wednesday,thursday,friday,saturday,id_personalities,active,"date_added"
1,"2011-06-29 11:33:46","DJ","DJ","06:00 am","10:00 am","06:00:00","10:00:00",NULL,NULL,1,1,1,1,1,1,0,1,NULL
2,"2011-06-29 11:33:46","DJ","DJ","12:00 pm","03:00 pm","12:00:00","03:00:00",NULL,NULL,1,1,1,1,1,NULL,0,1,NULL
3,"2011-06-29 11:33:46","DJ","DJ","09:00 am","12:00 pm","09:00:00","12:00:00",NULL,NULL,0,0,0,0,0,NULL,NULL,1,NULL
4,"2011-06-29 11:35:17","DJ","DJ","03:00 pm","06:00 pm","15:00:00","18:00:00",NULL,NULL,1,1,1,1,1,0,NULL,1,NULL
5,"2011-06-29 11:35:39","Scott Stevens","Scott Stevens","06:00 pm","09:00 pm","18:00:00","21:00:00",NULL,NULL,0,0,0,0,0,NULL,NULL,1,"2011-06-21 6:15:57"
6,"2011-06-29 11:37:03","DJ","DJ","09:00 pm","12:00 am","21:00:00","00:00:00",NULL,NULL,0,0,0,0,0,NULL,NULL,1,"2011-06-21 6:18:10"
7,"2011-06-29 11:37:17","DJ","DJ","12:00 am","06:00 am","00:00:00","06:00:00",NULL,NULL,1,1,1,1,1,NULL,NULL,NULL,NULL

Это дамп CSV из таблицы.

1 Ответ

0 голосов
/ 30 июня 2011

Во-первых, вы можете начать с упрощения вашей базы данных. Ниже предлагается альтернатива.

CREATE TABLE `show` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `show_name` VARCHAR(64) NOT NULL,
  `sub_name` VARCHAR(64) NOT NULL,
  `show_start` DATETIME NOT NULL,
  `show_end` DATETIME NOT NULL,

/*    OTHER COLUMNS     */

  `datecreated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `dateupdated` TIMESTAMP,
  PRIMARY KEY  (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

Если шоу не повторяется много раз в неделю, вам не нужны семь столбцов недели. Просто получите его из show_start, используя функцию MySQL .

Как только вы это сделаете, получить все текущие шоу будет тривиально, используя MySQL или PHP. Например, чтобы получить все сегодняшние шоу с использованием MySQL, запрос будет

SELECT * FROM shows
WHERE DATE(NOW()) = DATE(`show_start`)

В приведенном выше запросе также есть множество альтернатив для DATE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...