Php 多维数组查询mysql
我在一家酒店预订系统工作,费用是每晚的。 我的数据库有两个表,一个叫做stock,另一个叫做promotions。第一行包含365天的一行,最后一行仅包含折扣百分比的天数。有时,有些日子有两种或两种以上不同的折扣。在本例中,1月30日和31日的值分别为0.10和0.15 桌上存货Php 多维数组查询mysql,php,mysql,arrays,multidimensional-array,Php,Mysql,Arrays,Multidimensional Array,我在一家酒店预订系统工作,费用是每晚的。 我的数据库有两个表,一个叫做stock,另一个叫做promotions。第一行包含365天的一行,最后一行仅包含折扣百分比的天数。有时,有些日子有两种或两种以上不同的折扣。在本例中,1月30日和31日的值分别为0.10和0.15 桌上存货 date | rate -------------------------- 2017-01-29 500 2017-01-30 500 2017-01-31 500 表促销
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
mysql查询选择s.date、s.rate、IFNULLp.percent、0
从库存s向左加入促销s.date=p.date
如果s.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设置为默认值
ALTER TABLE promotions CHANGE COLUMN percent [maintain-its-type] NOT NULL DEFAULT '0';
然后,问题是我是否理解为每个日期提取最大和最小百分比值的问题
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;
}
到目前为止,我对你的目的/用途做了太多的假设。
基本上,将0设置为默认百分比,查询每个日期速率对的最高和最低百分比。如果为0,则0将显示为最高和最低值。对结果集执行任意操作。能否显示SQL查询和表,以及它应该是什么样子?是的,对不起,我编写了查询。能否提供您的代码?因此,假设不能在两个数组中分配第29天。你如何构建你的阵列?@AngelValdez如果这解决了你的问题,请给它绿色的记号,如果没有,请解释。