【发布时间】: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语句,这会有所帮助。