数据库查询逻辑问题
问题描述:
我有一个数据库,我提取以下字段:数据库查询逻辑问题
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++;
}
}
我知道这不会工作,因为它是所有创建多个机票预订和价值观所以基本上使得查询到一个数组多个日期。
我只是不能想到如何去做。
任何帮助将不胜感激。
谢谢
答
按航空公司的代码排序,作为ORDER BY子句中的第二个字段。然后在您的数据库行循环中不断添加总数,直到当前行的航空公司代码与前一行不同。此时将它写入数组,然后重复该过程,直至到达下一个日期。
我承认我对json有点新手,但对我来说看起来不像格式良好的json。 – Strawberry
将航空公司代码订购为ORDER BY子句中的第二个字段。然后在您的数据库行循环中不断添加总数,直到当前行的航空公司代码与前一行不同。此时将它写入数组,然后重复该过程,直至到达下一个日期。 – ADyson
@strawberry - 是格式不好,但它只是我想要的一个例子。 – Andrew