多维数组查询mysql

时间:2017-01-29 17:37:58

标签: php mysql arrays multidimensional-array

我在酒店预订系统工作,价格是每晚。 我的数据库有两个表,一个叫做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

                )
        )
)

1 个答案:

答案 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;
}

到目前为止,我对你的目的/用途做了太多假设。 基本上,将零设置为默认百分比,查询每个日期 - 速率对的最高和最低百分比(如果为零,则零将显示为最高和最低值)。用结果集做任何你想做的事。