嘿伙计们 - 问题源于用于存储房地产信息的设计不佳的数据库。我为我的客户设置了一个模板,用于选择周末并显示周末开放的房屋。开放时间(ohtime1,ohtime2,ohtime3)存储为tinytext,无法知道AM或PM。 “12:00 - 2:00”和“01:00 - 03:00”是我们人们在中午 - 下午2点和下午1点至下午3点看到的常见条目,但是当我查询数据库和ORDER BY ohtime1时,它显然会放置01 :00:00之前的00。我在使用SQL排序和使用不同的php排序方法时遇到困难。包含所有未决房屋信息的初始列表数组的设置如下:
$ listings [0] [displayaddress] =帝国大厦
$ listings [0] [baths] =太多无法计算
$ listings [0] [ohtime1] = 12:00 - 02:00
$ listings [1] [displayaddress] =麦迪逊广场花园
$ listings [1] [baths] = 2
$ listings [1] [ohtime1] = 01:00 - 03:00
等...
我使用foreach($ listing as $ listing)迭代$ listing来处理我们使用的smarty模板,以及分离到不同的日子,然后再分类为manhattan和brooklyn列表。这导致4个新阵列。我的理论是,如果我在上午09:00到24小时之前将所有时间转换,然后对它们进行排序,然后分配到不同的日期/行政区,它将起作用。这是转换代码:
$p = explode("-",$listing[ohtime1]); //01:00 - 03:00
$time1 = trim($p[0]); //01:00
$time2 = trim($p[1]); //03:00
$hour1 = substr($time1,0,2); //01
$hour2 = substr($time2,0,2); //03
$min1 = explode(":",$time1);
$min2 = explode(":",$time2);
$min1 = $min1[1]; //00
$min2 = $min2[1]; //00
//convert all times to 24 hour
if($hour1 < 9) $hour1 = $hour1+12; //13
if($hour2 < 9) $hour2 = $hour2+12; //15
$listing[ohtime1] = $hour1.":".$min1." - ".$hour2.":".$min2; //13:00 - 15:00
$listing[hour1] = $hour1;
$listing[hour2] = $hour2;
转换并不困难,但是如何对它们进行排序却不知所措。我不熟悉高级SQL理论,因为我实现了转换为24小时,我在php中将其转换为mysql。我还在考虑在创建新阵列时可以实现排序功能,但我又一次不知所措。以下是分离到新数组的代码:
foreach($openhouse_date_fields as $oh){ //3 possible open house dates
if(substr($listing[$oh], 0,10) == $date) { //if any of the listings's open houses match the first search date
if($listing[sect] == "Brooklyn") {
$listingsb[$listing[displayaddress]] = $listing;
}
else
$listingsm[$listing[displayaddress]] = $listing;
}
elseif(substr($listing[$oh], 0,10) == $date2) { //if any of the listings's open houses match the second search date
if($listing[sect] == "Brooklyn")
$listingsb2[$listing[displayaddress]] = $listing;
else
$listingsm2[$listing[displayaddress]] = $listing;
}
}
我希望这是足够的信息。感谢您花时间阅读并获得任何反馈!
答案 0 :(得分:0)
以下是将TINYTEXT
列之一转换为TIME
类型的一对列的示例:
SELECT
MAKETIME(start_hour + IF(start_hour<9, 12, 0), start_minute, 0) AS start_time,
MAKETIME(finish_hour + IF(start_hour<9, 12, 0), finish_minute, 0) AS finish_time
FROM (
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(ohtime1, ' - ', 1), ':', 1) AS start_hour,
SUBSTRING_INDEX(SUBSTRING_INDEX(ohtime1, ' - ', 1), ':', -1) AS start_minute,
SUBSTRING_INDEX(SUBSTRING_INDEX(ohtime1, ' - ', -1), ':', 1) AS finish_hour,
SUBSTRING_INDEX(SUBSTRING_INDEX(ohtime1, ' - ', -1), ':', -1) AS finish_minute
FROM MyOpenHouseTable) t
ORDER BY start_time;