我有一个SQL查询,它查询某些日期的数据。例如,在01.01.2018
和20.01.2018
之间。但是,如果某些日期没有任何数据,请举例说明01.01.2018
,02.01.2018
,19.01.2018
和20.01.2018
我的SQL查询将不会返回这些日期。 03.01.2018
之前只有18.01.2018
的SQL返回值。
现在我的问题来了。即使在我的日期开头和结尾都没有数据,我仍然希望将这些日期添加到数组中并为日期添加0。因此,用户仍然知道“好的,01.01.2018
,02.01.2018
,19.01.2018
和20.01.2018
上没有任何数据。
但我怎么能这样做?以下是我拥有的数据示例以及我通过SQL查询获取的数据
$fromDate = '01.01.2018';
$toDate = '20.01.2018';
returned would be 2 columns with those data:
03.01.2018 - 5
04.01.2018 - 2
06.01.2018 - 8
07.01.2018 - 6
08.01.2018 - 10
09.01.2018 - 1
10.01.2018 - 6
13.01.2018 - 7
14.01.2018 - 2
16.01.2018 - 5
17.01.2018 - 7
18.01.2018 - 1
数据数组包含日期,而点击数组包含日期的点击次数。两个阵列的顺序非常重要,因为例如键5返回数据阵列的日期和点击数组中日期的点击次数。
我已经知道如何填补日期之间的空白。但我只是不知道如何填补SQL查询的开始日期和第一个返回日期以及SQL查询的最后日期和最后返回日期之间的差距。
这是我填写第一个和最后一个日期之间差距的代码。例如,由于SQL查询未返回05.01.2018
,11.01.2018
,12.01.2018
和15.01.2018
的值,因此这些日期将添加到数据数组中单击数组(点击数组为0)。
但正如我已经问到的,我怎样才能在SQL查询的开始日期和第一个返回日期以及SQL查询的最后日期和最后返回日期这样做?
// assume the first element is right
$fixed_data = array($data[0]);
$fixed_clicks = array($clicks[0]);
for ($i = 1; $i < count($data); $i++) {
echo "Going through " . $data[$i] . "\n";
// if there is a gap, fill it (add 0s to corresponding array)
while (date('d.m.Y', strtotime(end($fixed_data) . ' + 1 day')) != $data[$i]) {
$fixed_data[] = date('d.m.Y', strtotime(end($fixed_data) . ' + 1 day'));
$fixed_clicks[] = 0;
echo "Added " . date('d.m.Y', strtotime(end($fixed_data) . ' + 1 day')) . "\n";
}
// add the data which exists after gap
$fixed_data[] = $data[$i];
$fixed_clicks[] = $clicks[$i];
}
foreach ($fixed_data as $key => $var) {
$fixed_data[$key] = (string)$var;
}
foreach ($fixed_clicks as $key => $var) {
$fixed_clicks[$key] = (string)$var;
}
$leadsArray[] = array(array("daten" => $fixed_data), array("anzahl" => $fixed_clicks));
var_dump($leadsArray);
答案 0 :(得分:1)
为什么不将开始日期添加到数组的开头,将最后日期添加到数组的末尾?
//Add beginning date
array_unshift($data, $fromDate); //'01.01.2018'
array_unshift($clicks, 0);
//Add last date
array_push($data, $toDate); //'20.01.2018'
array_push($clicks, 0);
循环应该照顾其余部分。