2016-08-22 3 views
0

У меня есть база данных, и я извлекая следующие поля:базы данных логики запроса вопрос

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++; 
     } 
    } 

Я знаю, что это не будет работать, как все это делает создать несколько дат с заказом нескольких авиакомпаний и значениями поэтому в основном делает запрос в массив.

Я просто не могу подумать, как это сделать.

Любая помощь была бы принята с благодарностью.

Спасибо

+0

Я признаю, что я немного новичок, когда дело доходит до json, но для меня это не похоже на форматированный json. – Strawberry

+1

закажите его кодом авиакомпании как второе поле в предложении ORDER BY. Затем в вашем цикле строк db продолжайте добавлять к сумме до тех пор, пока код авиакомпании текущей строки не будет отличаться от предыдущего. В этот момент напишите его в массив, а затем повторите процесс, пока не дойдете до следующей даты. – ADyson

+0

@strawberry - да, это плохо отформатировано, но это был всего лишь пример того, чего я хотел. – Andrew

ответ

0

Заказать его код авиакомпании в качестве второго поля в ORDER BY предложения. Затем в вашем цикле строк db продолжайте добавлять к сумме до тех пор, пока код авиакомпании текущей строки не будет отличаться от предыдущего. В этот момент напишите его в массив, а затем повторите процесс, пока не дойдете до следующей даты.

Смежные вопросы