【发布时间】:2011-11-28 04:15:28
【问题描述】:
我正在构建一个预订系统,并选择使用时间戳将预订存储在我的 mysql 数据库中。但是,用户可以连续预订 2 或 3 个插槽,例如:
9:00 - 9:30
9:30 - 10:00
10:00 - 10:30
或者他们可以只预订一个插槽。
我想显示用户进行的预订,但按时间范围对它们进行分组,例如,在上面显示的时间中,它应该显示 9:00 - 10:30,而不是列出 3 个项目。
每个预订都与 bookingFrom 和 bookingUntil 一起存储为时间戳。我已经设法让它为 2 个预订工作(例如 9:00-9:30 和 9:30-10:00 仅显示为 9:00-10:00)但如果有一个中间条目,我苦苦思索如何让它发挥作用。
有什么想法吗?我正在使用 PHP/mySQL
表格架构
bookingID、userID、bookingFrom(INT - unix 时间戳)、bookingUntil(INT - unix 时间戳)
CREATE TABLE IF NOT EXISTS `dma_bookings` (
`bookingID` int(11) NOT NULL AUTO_INCREMENT,
`userID` int(11) NOT NULL,
`bookingFrom` int(11) NOT NULL,
`bookingUntil` int(11) NOT NULL,
`roomID` int(11) NOT NULL,
PRIMARY KEY (`bookingID`),
KEY `userID` (`userID`,`bookingFrom`,`bookingUntil`),
KEY `roomID` (`roomID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=98 ;
--
-- Dumping data for table `dma_bookings`
--
INSERT INTO `dma_bookings` (`bookingID`, `userID`, `bookingFrom`, `bookingUntil`, `roomID`) VALUES
(95, 1, 1317362400, 1317364199, 1),
(96, 1, 1317364200, 1317365999, 1),
(97, 1, 1317366000, 1317367799, 1);
到目前为止的代码(道歉非常混乱!):
$bookingArray = $data['bookingInfo'];
$bookingCleanArray = array();
$reversedArray = array_reverse($data['bookingInfo']);
$currentItemIndex=0;
$nextItemIndex=1;
foreach($reversedArray as $booking){
echo "<hr>BookingID: ".$booking['bookingID']."<br/><br/>";
$bookingFromMinusOne=$booking['bookingFrom']-1;
if($bookingFromMinusOne==$data['bookingInfo'][$nextItemIndex]['bookingUntil']){
//The current booking is part of a multiple booking range
$bookingArray[$nextItemIndex]['bookingUntil']=$booking['bookingUntil'];
unset($bookingArray[$currentItemIndex]);
}else{
echo "Single booking<br/>";
}
$currentItemIndex++;
$nextItemIndex++;
}
【问题讨论】:
-
提出一些关于表模式和数据的想法,以及你需要从查询中得到什么结果。
-
更新了最初的帖子,谢谢!