2013-03-05 24 views
-1

我在mysql中有一个表,它有一个startdate和enddate。JSON编码添加SQL记录之间的每个日期

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"}] 

由于这个纪录已跨越30天,我想的JSON每个日期输出一个(唯一不同的日期,请参阅下面)我想这个INSTEAD

[{"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"},] 

这是SCRIPT IM使用:

$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)); 
+1

这完全不清楚你想要完成什么。请解释这个脚本没有做的事,你需要它做。 – cdhowie 2013-03-05 17:35:51

+0

这里有什么问题?你的脚本输出了什么?它应该输出什么?你有任何错误?这里有什么问题? – 2013-03-05 17:49:26

+0

这一切都在问题!脚本输出与期望的输出一起存在。没有错误! – Codded 2013-03-06 09:03:54

回答

2

尝试通过以下替换代码:

$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()可能会帮助你的日期操作。

+0

你在时机上打败了我。 + 1'd ;-) – maraspin 2013-03-05 17:57:23

0

不知道我是否明白你的观点。这可以给你一个出发点。 基本上,您需要获取所有行,然后为您想要考虑的每一天创建一条记录。

$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)); 
相关问题