在codeigniter&中比较日期MySQL的

时间:2011-06-29 17:26:29

标签: php mysql codeigniter

我完全不在自己身边,我自己也无法弄清楚这一点,并且阅读了我能抓到的所有文章,但仍然没有。所以我希望有人可以提供帮助。

我有一张表格可以保存节目。它有四个时间字段show_start(HH:MM AM / PM),show_end(HH:MM AM / PM),show_start_actual(HH:MM:SS),{{1} }(HH:MM:SS)。此外,我有7列以一周中的日期命名(星期日,星期一等)。一周中的几天是1或0来注释节目是否在某一天。 show_end_actual列保留24小时时间格式,其他时间为actual字段。

我正在努力撤回当前正在播放的节目。时间非常基本(即早上6点 - 上午10点等)我已经在PHP和MySQL中尝试了这一点,我正在做的事情都没有。我相信这有一个简单的解决方案。

这是我目前正在比较PHP中的时间,但我认为如果我可以在mySQL中将其拉回来会更有效。

模型

varchar

使用数据更新:

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;
}

这是表中的CSV转储。

1 个答案:

答案 0 :(得分:0)

首先,您可以从简化数据库设计开始。以下是建议的替代方案。

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;

除非节目在一周内重复多次,否则您不需要本周的七列。只需使用MySQL functionshow_start本身获取。

完成后,使用MySQL或PHP获取所有当前节目是微不足道的。例如,要使用MySQL获取所有今天的节目,查询将是

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

上述查询中DATE还有很多alternatives