【问题标题】:PHP Use array (from earlier while loop) to query new foreachPHP 使用数组(来自早期的 while 循环)来查询新的 foreach
【发布时间】:2020-03-26 14:17:01
【问题描述】:

我正在尝试使用开始/结束日期过滤器进行动态查询,以显示每个日期的单位。我已经查询了数据库中开始日期和结束日期之间可用的行,它创建了一个数组,如:(array ("2020-03-01", "2020-03-02", 2020-03-03")。当我想在另一个 foreach 中使用这个数组来获取每天的相关单位时,我不会得到任何结果。最大的问题是:我做错了什么?

第一个while循环:

if (mysqli_num_rows($result) > 0) {
    while ($row = mysqli_fetch_assoc($result)) {

      $date = $row["datetime"];

      $filterDates[] = '"'.$row["datetime"].'", ';
      }
}

当使用这个 foreach 时,我得到了结果。

foreach (array("2020-03-10 00:00:00", "2020-03-11 00:00:00", "2020-03-12 00:00:00", "2020-03-13 00:00:00", "2020-03-14 00:00:00", ) as &$sqlDate)

当使用这个 foreach 时,我不会得到结果。

foreach (($filterDates) as &$sqlDate)

这是我用来获取每天单位的“动态”查询

  $sql = "SELECT `datetime`, `period`, `units` , SUM(`Units`) AS 'units' FROM `Subscriptions_raw` WHERE `datetime` LIKE '%".$sqlDate."%' AND `period` = '1 Month' GROUP BY `datetime`";
  $result = $mysqli->query($sql);

        for ($set = array (); $row = $result->fetch_assoc(); $set[] = $row);

        echo $set[0]["units"].", ";
}

【问题讨论】:

  • 你为什么在你的datetime 上使用LIKE?该列的类型是什么?另外,为什么要在此处添加额外的引号:$filterDates[] = '"'.$row["datetime"].'", ';?
  • 最好看看你能不能创建1条SQL语句来做这个处理,如果你只做第一个SQL就能运行第二个SQL语句,这会有所帮助。

标签: php foreach


【解决方案1】:

在...中添加日期时

$filterDates[] = '"'.$row["datetime"].'", ';

您正在添加类似...的日期

"2020-03-10 00:00:00",

到数组,它不会匹配数据库中的日期(无论如何不太可能)。

您只需要添加日期,无需额外标记...

$filterDates[] = $row["datetime"];

【讨论】:

  • 就是这样!我以为我必须标记日期才能“打印”正确的标记。谢谢!我会在几分钟内将此标记为答案:-)
猜你喜欢
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多