php - 根据时间戳按日期和时间对条目进行分组

标签 php mysql date timestamp

我正在构建一个预订系统,并选择使用时间戳将预订存储在我的 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++;

        }

最佳答案

假设每次将它们加载到数组中时都有单独的字段,然后使用第一个字符串并计数以找到最后一个字符串。

但是是的,正如 rahularyansharma 所说,需要更多细节。

好吧……嗯嗯 难道你不想捕获:

SELECT dma_bookings (bookingID, userID, bookingFrom, bookingUntil, roomID) WHERE userID = 1)

应该给我们:

bookingID, userID, bookingFrom, bookingUntil, roomID

 $bookingArray = array( 95, 1, 1317362400, 1317364199, 1 ),
 array( 96, 1, 1317364200, 1317365999, 1 ),
 array( 97, 1, 1317366000, 1317367799, 1 ),

所以如果我们...

echo  $bookingArray[][2]; we get '1317362400'
$c = count($bookingArray);
echo $bookingArray[$c][3]; we get '1317367799'

还是我完全误解了您的意思?

关于php - 根据时间戳按日期和时间对条目进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7605749/

相关文章:

javascript - 如何从 Firebase 获取服务器时间

php - 如何从其他关联数组创建关联数组?

php - 分离mysql获取数组结果

php - md5 在多部分/混合电子邮件表单数据中的用途

php - 每当mysql更新时动态更新json文件

按周数划分的日期范围 Golang

php - 如何在 foreach 循环中对来自 mySQL 数据库的相似结果进行分组?

mysql - 恢复mysql数据库

php - Laravel Eloquent 创建使用自动增量的组合键

sql - 检查输入日期是否在开始和结束日期表内