数据库查询逻辑问题

时间:2016-08-22 12:53:41

标签: php mysql arrays json pdo

我有一个数据库,我正在提取以下字段:

BookDate - AirlineCode - BkngVal

我想要做的是将输出保存为json文件,格式如下:

[{
Date: 2016-01-03,
Airline Code: BA,
Airline BkngVal: 1234.00,
Airline Code: VS,
Airline BkngVal: 123.00,
Airline Code: EK,
Airline BkngVal: 8743.09
},
{
Date: 2016-01-04
Airline Code: UA,
Airline BkngVal: 134.00,
Airline Code: BA,
Airline BkngVal: 129.00,
Airline Code: 9W,
Airline BkngVal: 823.09
}]
对于数据库中的每个日期,

等等。问题是,在同一天为每家航空公司进行了多次预订,因此我试图了解最佳方式对日期进行分组,然后将预订值添加到使用该日期的每家航空公司,然后添加进入json文件,其中日期是主键。

最初的MySql查询是:

$stmt = $db->prepare('SELECT BookDate, BkngVal, Market, AirlineCode 
                      FROM sales 
                      WHERE (Market = :market) 
                        AND (BookDate >= :startDate) 
                        AND (BookDate <= :endDate) 
                      ORDER BY BookDate ASC');
    $stmt->execute(array(
        'market' => $location,
        'startDate' => $start,
        'endDate' => $end
    ));

市场是我想看的国家,所以我们假设它是英国。所以我正在查看在英国预订的所有航班。

如何循环使用这些并将val添加到航空公司,然后将其添加到json文件中。

 while ($row = $stmt->fetch()) {

        if ($row['BookDate'] == $BookDate) {

            $airline_sales_made_per_day += $row['BkngVal'];
        }
        else {
            if ($count > 0) {
                $data[] = array(
                    'date' => $BookDate,
                    'airline sales made per day' => $airline_sales_made_per_day
                );
            }
            $count++;
        }
    }

我知道这不会起作用,因为所有这一切都是创建多个日期,包含多个航空公司预订和价值观,所以基本上将查询变成一个数组。

我只是想不出怎么做。

非常感谢任何帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

按航空公司代码订购,作为ORDER BY子句中的第二个字段。然后在您的数据库行循环中继续添加总数,直到当前行的航空公司代码与前一行不同。此时将其写入数组,然后重复该过程,直到到达下一个日期。