2014-11-05 2 views
-1

Мне нужно прохождение trought 09.03.2014 и 12.03.2014 в моей деятельности базы данных MySQL:JOIN MySQL PHP функцию вместо Еогеасп цикла

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

да, но дни, которые не имеют какой-либо деятельности, должны иметь пустой массив –

+0

Проверьте мой обновленный ответ. – Seunhaab