【问题标题】:JSON encode add for each date between in SQL record为 SQL 记录中的每个日期添加 JSON 编码
【发布时间】:2013-03-05 17:33:20
【问题描述】:

我在 mysql 中有一个表,它有一个开始日期和结束日期。

1 行的示例是:

startdate -> 20121224
endate -> 20121226
title -> name

这将返回 (OUTPUT!!!):

[{"user":"378","date":"UNIX_TIMESTAMP(startdate)","title":"name","description":"6 Days","url":"UNIX_TIMESTAMP(enddate)","bmanager":"manager name","academic_year":"20120801","division":"division name","manager_id":"3"}]

由于这条记录跨越 3 天,我希望 JSON 为每个日期输出一个(唯一的区别是日期,请参见下文)我想要这个代替

[{"user":"378","date":"UNIX_TIMESTAMP(1st date)","title":"name","description":"6 Days","url":"UNIX_TIMESTAMP(1st date)","bmanager":"manager name","academic_year":"20120801","division":"division name","manager_id":"3"},
{"user":"378","date":"UNIX_TIMESTAMP(2nd date)","title":"name","description":"6 Days","url":"UNIX_TIMESTAMP(2nd date)","bmanager":"manager name","academic_year":"20120801","division":"division name","manager_id":"3"},
{"user":"378","date":"UNIX_TIMESTAMP(3rd date)","title":"name","description":"6 Days","url":"UNIX_TIMESTAMP(3rd date)","bmanager":"manager name","academic_year":"20120801","division":"division name","manager_id":"3"},]

这是我正在使用的脚本:

$sqldata = mysql_query('
SELECT
datediff(requests.end_date, requests.start_date) as numdays,
requests.user,
UNIX_TIMESTAMP(requests.start_date) AS date,
requests.employee AS title, 
requests.days AS description,
UNIX_TIMESTAMP(requests.end_date) AS url,
business.line_manager AS bmanager,
requests.academic_year,
business.academic_year,
business.division,
line_managers.userid AS manager_id
FROM requests 
INNER JOIN holiday_entitlement_business_manual AS business ON requests.user=business.userid AND requests.academic_year=business.academic_year
INNER JOIN line_managers ON business.line_manager=line_managers.name
WHERE requests.approved = 1
');

$posts = array();

while($row = mysql_fetch_assoc($sqldata))
{
    $row['date'] = $row['date'].'000';
    $row['url'] = $row['url'].'000';
    $posts[] = $row;
}
mysql_free_result($sqldata);
die(json_encode($posts));

【问题讨论】:

  • 完全不清楚您要完成什么。请解释一下这个脚本没有做什么你需要它来做。
  • 这里有什么问题?你的脚本输出什么?它应该输出什么?你有任何错误吗?这里有什么问题?
  • 一切都在问题之中!脚本输出与所需的输出一起存在。没有错误!

标签: php mysql arrays json


【解决方案1】:

尝试用以下代码替换您的代码:

$sqldata = mysql_query('
SELECT
requests.start_date as startdate,
datediff(requests.end_date, requests.start_date) as numdays,
requests.user,
UNIX_TIMESTAMP(requests.start_date) AS date,
requests.employee AS title, 
requests.days AS description,
UNIX_TIMESTAMP(requests.end_date) AS url,
business.line_manager AS bmanager,
requests.academic_year,
business.academic_year,
business.division,
line_managers.userid AS manager_id
FROM requests 
INNER JOIN holiday_entitlement_business_manual AS business ON requests.user=business.userid AND requests.academic_year=business.academic_year
INNER JOIN line_managers ON business.line_manager=line_managers.name
WHERE requests.approved = 1
');

$posts = array();

while($row = mysql_fetch_assoc($sqldata))
{
   $startDate = $row['startdate'];
   unset($array['startdate']);
   $dayDiff = $row['numdays'];
   $row['date'] = $row['date'].'000';
   $row['url'] = $row['url'].'000';
   for($i = 0; $i <= $dayDiff; $i++)
   {
      $row['date'] = ...; // Do here the date parsing and add $i to the days
      $posts[] = $row;
   }

}
mysql_free_result($sqldata);
die(json_encode($posts));

dateparse()mktime() 这些函数可能会帮助您进行日期操作。

【讨论】:

  • 你确实在时间上打败了我。 +1 ;-)
【解决方案2】:

不确定我是否明白你的意思。这可以给你一个起点。 基本上,您需要获取所有行,然后为您希望考虑的每一天创建一条记录。

 $sqldata = mysql_query('
    SELECT
    datediff(requests.end_date, requests.start_date) as numdays,
    requests.user,
    UNIX_TIMESTAMP(requests.start_date) AS date,
    requests.employee AS title, 
    requests.days AS description,
    UNIX_TIMESTAMP(requests.end_date) AS url,
    business.line_manager AS bmanager,
    requests.academic_year,
    business.academic_year,
    business.division,
    line_managers.userid AS manager_id
    FROM requests 
    INNER JOIN holiday_entitlement_business_manual AS business ON requests.user=business.userid AND requests.academic_year=business.academic_year
    INNER JOIN line_managers ON business.line_manager=line_managers.name
    WHERE requests.approved = 1
    ');

$posts = array();

while($row = mysql_fetch_assoc($sqldata))
{
    $row['date'] = $row['date'];
    $row['url'] = $row['url'];
    for($x = $row['date']; $x < $row['url']; $x+= 86400) {
          // where 86400 makes you advancing by a day in secs
          $row['date'] = $x;
          $row['url'] = $x;
          $posts[] = $row;
    }
    $posts[] = $row;
}
mysql_free_result($sqldata);
die(json_encode($posts));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 2020-08-22
    • 1970-01-01
    相关资源
    最近更新 更多