我在酒店预订系统工作,价格是每晚。 我的数据库有两个表,一个叫做stock,另一个是促销。第一行包含一行(365天),最后一行仅包含折扣百分比的天数。有时,有些日子有两个或更多不同的折扣百分比。在这种情况下,1月30日和31日有0.10和0.15。
表库存
date | rate
--------------------------
2017-01-29 500
2017-01-30 500
2017-01-31 500
表促销
date | percent
--------------------------
2017-01-30 0.10
2017-01-31 0.10
2017-01-30 0.15
2017-01-31 0.15
while mysql查询(SELECT s.date,s.rate,IFNULL(p.percent,0) FROM stock s LEFT JOIN促销p ON s.date = p.date 在约会时间“2017-01-29”和“2017-01-31”之间的日期,我得到了这个结果:
date | rate | percent
-----------------------------------
2017-01-29 500 0
2017-01-30 500 0.10
2017-01-31 500 0.10
2017-01-30 500 0.15
2017-01-31 500 0.15
我需要创建一个多维数组,每个折扣百分比包含一个数组,这些数组包含三天,第29天的百分比为0.00,其他两天为0.10。第29天换新的,百分之0.00,另外两天0.15。我正在试着但我不能在两个阵列中分配第29天。
Array
(
[1] => Array
(
[0] => Array
(
[date] => 2017-01-29
[rate]=>500
[percent] => 0.00
)
[1] => Array
(
[date] => 2017-01-30
[rate]=>500
[percent] => 0.10
)
[2] => Array
(
[date] => 2017-01-31
[rate]=>500
[percent] => 0.10
)
)
[2] => Array
(
[0] => Array
(
[date] => 2017-01-29
[rate]=>500
[percent] => 0.00
)
[1] => Array
(
[date] => 2017-01-30
[rate]=>500
[percent] => 0.15
)
[2] => Array
(
[date] => 2017-01-31
[rate]=>500
[percent] => 0.15
)
)
)
答案 0 :(得分:0)
从本质上讲,这就像是一个数据库问题。
将percent列设置为NOT NULL并将0设置为DEFAULT。
ALTER TABLE promotions CHANGE COLUMN percent [maintain-its-type] NOT NULL DEFAULT '0';
然后问题是(如果我理解这个问题)为每个日期提取MAX()和MIN()百分比值。
SELECT s.date, s.rate, MAX(p.percent) AS maxperc, MIN(p.percent) AS minperc
FROM stock s
LEFT JOIN promotions p ON s.date = p.date
WHERE s.date BETWEEN '2017-01-29' AND '2017-01-31'
GROUP BY s.date,s.rate;
...我还没有测试过,所以可能需要一些摆弄。
然后,当您遍历结果集时,可以声明两个单独的子数组并构建完整的数组。
$array=[];
$i=0;
while($row=mysqli_fetch_assoc($result)){
$array[0][$i]["date"]=$row["date"];
$array[0][$i]["rate"]=$row["rate"];
$array[0][$i]["perc"]=$row["minperc"];
$array[1][$i]["date"]=$row["date"];
$array[1][$i]["rate"]=$row["rate"];
$array[1][$i]["perc"]=$row["maxperc"];
++$i;
}
到目前为止,我对你的目的/用途做了太多假设。 基本上,将零设置为默认百分比,查询每个日期 - 速率对的最高和最低百分比(如果为零,则零将显示为最高和最低值)。用结果集做任何你想做的事。