我完全不在自己身边,我自己也无法弄清楚这一点,并且阅读了我能抓到的所有文章,但仍然没有。所以我希望有人可以提供帮助。
我有一张表格可以保存节目。它有四个时间字段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转储。
答案 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 function从show_start
本身获取。
完成后,使用MySQL或PHP获取所有当前节目是微不足道的。例如,要使用MySQL获取所有今天的节目,查询将是
SELECT * FROM shows
WHERE DATE(NOW()) = DATE(`show_start`)
上述查询中DATE还有很多alternatives。