我遇到了以下问题: 对于我的预订系统,我想在夜间保存所有可能组合的价格,因此不必即时计算它们。 我选择此解决方案以提高性能,并选择这些价格每天晚上仅更改一次。 我的第一个尝试是将所有可能的组合保存到数据库中。 但是我很快发现这并不有效。
预订的范围从1位成人到9位成人和9位儿童,每个孩子的年龄在0到17岁之间。
当用户搜索1位成人时,我需要能够返回价格,并且当用户搜索2位成人和3位年龄分别为2、10和15岁的孩子时,我也需要能够返回价格。
这是我的第一种方法,不考虑孩子的年龄:
//Amount adults
for($a = 1; $a <= static::MAX_ADULTS; $a++) {
//Amount children
for($c = 0; $c <= static::MAX_CHILDREN; $c++) {
$cheapestPriceObj = null;
//Add 1 day to arrival per iteration
for($i = 0; $i < $dDiff->days; $i++) {
$arrival = strtotime(" + $i days",$this->_arrival);
$travelCompany = array(array('amount_adults' => $a, 'amount_children' => $c));
$priceInfo = $this->_curAcco->getListerPriceInfo($arrival, static::DEFAULT_DURATION,$travelCompany);
if($priceInfo) {
if(is_null($cheapestPriceObj)) {
$cheapestPriceObj = $priceInfo;
} else if($priceInfo['price'] < $cheapestPriceObj['price']) {
$cheapestPriceObj = $priceInfo;
}
}
}
//Save cheapest price and date for travelcompany
if($cheapestPriceObj && $cheapestPriceObj['price'] > 0) {
$default = new AccommodationRoomDefaultPrice;
$default->fkItemRoom = $cheapestPriceObj['rooms'][0]['itemRoom'];
$default->arrival_date = $cheapestPriceObj['arrival_date'];
$default->duration = $cheapestPriceObj['duration'];
$default->amount_adults = $a;
$default->amount_children = $c;
$default->price = $cheapestPriceObj['price'];
$default->save();
}
}
}
数据库架构如下:
id-fkItemRoom-arrival_date-duration-amount_adults-amount_children-price
但这错过了“年龄”部分。价格也取决于年龄。
如何解决此问题?我不仅在寻找“答案”。我想对自己进行一般的大数据挑战教育。