【问题标题】:JOIN mysql php function instead foreach loop加入 mysql php 函数而不是 foreach 循环
【发布时间】:2014-11-05 17:57:34
【问题描述】:

我需要在我的 mysql 数据库活动中传递 09.03.2014 和 12.03.2014:

 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 数据库。我想创造其他方式来做到这一点?这将如何与 JOIN mysql 函数等...?同样在这里您可以看到我的 ID 1 和 ID 5 具有相同的时间戳,因此我需要将这些行的名称放在一个单元格中并为此数据创建单独的 HTML。

【问题讨论】:

    标签: php jquery mysql


    【解决方案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') 
    )
    

    【讨论】:

    • 是的,但是没有任何活动的天必须有空数组
    猜你喜欢
    • 2012-06-19
    • 1970-01-01
    • 2016-10-25
    • 2010-10-04
    • 1970-01-01
    • 2015-10-29
    • 2011-07-15
    • 2016-01-27
    • 2014-05-29
    相关资源
    最近更新 更多