gpt4 book ai didi

php - 将空值设置为不在 MySQL 中的日期

转载 作者:可可西里 更新时间:2023-11-01 08:06:22 25 4
gpt4 key购买 nike

因此,我正在使用该代码从 MySQL 中获取一些数据:

<?
$query=mysql_query("SELECT date,COUNT(*) as num FROM downloads WHERE prjID='".$_GET['id']."' GROUP BY date ORDER BY date ASC");
$num=mysql_num_rows($query);
$res='';
$i=0;
while($row=mysql_fetch_array($query)){

$i++;
$date=date("d.m.Y", strtotime($row['date']));

$dan=date("d", strtotime($row['date']));
$mesec=date("m", strtotime($row['date']));
$leto=date("Y", strtotime($row['date']));

if($i=1){
$danPrvi=$leto.", ".($mesec-1).", ".$dan;
$dan1=date("d", strtotime(time()));
$mesec1=date("m", strtotime(time()));
$leto1=date("Y", strtotime(time()));
$danZadnji=$leto1.", ".($mesec1-1).", ".$dan1;
}

$numb=1;

if($row['num']!=1){
$res.="[Date.UTC(".$leto.",".($mesec-1).",".$dan."),".$row['num']."], ";
}
else{
if($i!=$num){
$res.="[Date.UTC(".$leto.",".($mesec-1).",".$dan."),".$numb."], ";
}
else{
$res.="[Date.UTC(".$leto.",".($mesec-1).",".$dan."),".$numb."]";
}
}
}
?>

我得到这样的结果:

1.3.2013 - 1
6.3.2013 - 5

但我想得到这样的结果:

1.3.2013 - 1
2.3.2013 - 0
3.3.2013 - 0
4.3.2013 - 0
5.3.2013 - 0
6.3.2013 - 1

我也在使用 Highcharts,所以日期值的格式必须像 Date.UTC(year, month-1, day)

编辑:

我的数据库中没有所有日期。在我的考试中,只有 1.3.2013 和 6.3.2013,那么我如何检测并为所有日期之间没有值 >=1 的日期设置 0 值?

最佳答案

我想您需要做的是设置一个结构来保存您感兴趣的日期,然后在查询中使用它或对查询数据进行后处理。例如:

<?php
$query=mysql_query("SELECT date,COUNT(*) as num FROM downloads WHERE prjID='".$_GET['id']."' GROUP BY date ORDER BY date ASC");
$num=mysql_num_rows($query);

// Get the first and last dates in the result set
$firstRow = mysql_result($query, 0);
$lastRow = mysql_result($query, $num-1);

// Now make thos the begin and end dates
$beginDate = new DateTime(strtotime($firstRow['date']));
$endDate = new DateTime(strtotime($lastRow['date']));
$currentDate = $beginDate;
$interestingDates = array();

// Populate our interestingDates array with all counts set to 0
while ($currentDate <= $endDate){
$interestingDates[$currentDate->format('d.m.Y')] = 0;
$currentDate->add(new DateInterval('P1D'));
}

// Reset the data result for looping over
mysql_data_seek($query,0);
while($row=mysql_fetch_array($query)){
// Go ahead and format the string
$formatedString = date("d.m.Y", strtotime($row['date']));

// If the string is in our interestingDates array, update the count
if (array_key_exists($formatedString, $interestingDates)){
$interestingDates[$formatedString] = $row['num'];
}
}

// Print it out
foreach ($interestingDates as $key=>$value){
print "$key - $value\n";
}

注意 1: mysql_query 从 PHP 5.5.0 开始被弃用,将来会被删除。请使用另一个 API - 我推荐 pdo_mysql .

注意 2: 当前查询未参数化。使用 PDO,这可能看起来像:

$sth = $dbh->prepare('SELECT date,COUNT(*) as num FROM downloads WHERE prjID= :prjID GROUP BY date ORDER BY date ASC');
$sth->bindParam(':prjID', $_GET['id'], PDO::PARAM_INT);
$sth->execute();

免责声明 - 我实际上并没有运行这段代码,我只是在脑海中写下了它。您可能需要对其进行测试/调试。

关于php - 将空值设置为不在 MySQL 中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15704554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com