2014-11-05 59 views
-1

我需要传递trought 2014年3月9日和2014年12月3日在我的MySQL数据库活动:JOIN MySQL的PHP​​函数,而不是foreach循环

SELECT * FROM activity; 

ID timestamp_day name  details 
    1 1394319600 Meeting  Meeting with Ann about job 
    2 1394406000 Travel  Go to New York 
    3 1394492400 Work  Do some work... 
    4 1394578800 Vacation Prepare all necessary stuff 
    5 1394319600 Car repair Go to store to buy new parts for car 

我需要得到的是一个JSON数据来创建datatable.net表像这样:

Datum  | Name 
    ----------+----- 
    Sunday | 
    09/03  | 
    ----------+----- 
    Monday | 
    10/03  | 
    ----------+----- 
    Tuesday | 
    11/03  | 
    ----------+----- 
    Wednesday | 
    12/03  | 
    ----------+----- 

我尝试做什么:

PHP:

$dateString = '09.03.2014'; 
$startDate = new DateTime($dateString); 

$period = new DateInterval('P1M'); 
$endDate = clone $startDate; 
$endDate->add($period); 

$interval = new DateInterval('P1D'); 
$daterange = new DatePeriod($startDate, $interval ,$endDate); 
$i=1; 
foreach($daterange as $date){ 
    $temp = array(); 
    // the following line will be used to slice the Pie chart 
    $temp['ID'] = $i; 
    $dejt = $date->format("l") . PHP_EOL; 
    $temp['datum'] = '<strong>'.$dejt.'</strong></br>'.$date->format("d/m") . PHP_EOL; 


     $rs1 = $db->prepare('SELECT name FROM activity WHERE timestamp=:ts'); 
     $rs1->bindParam(':ts', $timestamp); 
     $rs1->execute(); 
     $naz = $rs1->fetchColumn(); 
         if ($naz != false) { 
       $temp['name'] = $naz; 
         } else { 
         $temp['vrsta'] = ''; 
         } 


     $output['data'][] = $temp; 
     $i++; 
     $jsonTable = json_encode($output); 
} 

    } catch(PDOException $e) { 
     echo 'ERROR: ' . $e->getMessage(); 
    } 
    echo $jsonTable; 

和JQuery:

$('#example').dataTable({ 
     "ajax": "table1.php", 
     "columns": [ 
      { "data": "ID" }, 
      { "data": "datum" }, 
      { "data": "name" }, 

     ], etc. 

我的代码工作很好,但我击中查询多次还数据库时,有相同的价值观timestamp_day然后我得到的只是第一...

所以你看,我打MySQL数据库与每个日期quesry。我想创建其他方式来做到这一点?这将如何看起来像JOIN mysql函数等?同样在这里,您可以看到ID 1和ID 5具有相同的时间戳,因此我需要将这些行的名称放在一个单元格中,并为此数据创建单独的HTML。

回答

1

不熟悉datatable.net,我只是告诉你一个选项来获取你的结果与一个数据库调用。必要时进行调整。

$rs1 = $db->prepare('SELECT * FROM activity;');  
$rs1->execute(); 
$rows = $rs1->fetchAll(); 
$daterange = new DatePeriod($startDate, $interval ,$endDate); 
$activities = array(); 
if (count($rows) > 0) 
{ 
    foreach ($rows as $row) 
    { 
     $activities[$row['timestamp_day']][] = $row['name']; 
    } 
    foreach($daterange as $date) 
    { 
     $formattedData = $data //format your date to timestamp here 
     if (!array_key_exists($formattedDate, $activities)) 
     { 
      $activities[$formattedDate] = array(); 
     } 
    } 
} 

为您提供了以下格式的数组:

$activities = array(
    [1394319600] => array('Meeting', 'Car repair') 
    [1394406000] => array('Travel') 
    [1394492400] => array('Work') 
    [1394578800] => array('Vacation') 
) 
+0

肯定的,但天即不具有任何活动都必须有空数组 – 2014-11-05 20:04:15

+0

检查我更新的答案。 – Seunhaab 2014-11-05 20:15:06