Php 多维数组查询mysql

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 表促销

我在一家酒店预订系统工作,费用是每晚的。 我的数据库有两个表,一个叫做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         | 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如果这解决了你的问题,请给它绿色的记号,如果没有,请解释。