【问题标题】:multidimensional array query mysql多维数组查询mysql
【发布时间】:2017-06-14 21:39:14
【问题描述】:

我在一家酒店预订系统工作,房价是每晚。 我的数据库有两个表,一个称为 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 查询 (SELECT s.date, s.rate, IFNULL(p.percent, 0) FROM stock s LEFT JOIN Promotions p ON s.date = p.date WHERE s.date as date BETWEEN '2017-01-29' AND '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

                )
        )
)

【问题讨论】:

  • 你能展示一下你的 SQL 查询和一个表,它应该是什么样子的吗?
  • 是的,对不起,我写了查询。
  • 你能提供你的代码吗?所以说你不能在两个数组中分配第 29 天。你如何构建你的数组?

标签: php mysql arrays multidimensional-array


【解决方案1】:

从本质上讲,这感觉像是一个数据库问题。

将百分比列设置为 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;
}

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

【讨论】:

  • @AngelValdez 如果这解决了您的问题,请给它打绿勾,如果没有请解释。
猜你喜欢
  • 2015-04-30
  • 2013-06-25
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
  • 2014-04-08
  • 2016-01-26
相关资源
最近更新 更多