2015-05-26 3 views
-2

Я работаю над данными для функции CSV, но я застрял.Добавление другой JOIN для запроса и получения заголовков столбцов таблицы

До сих пор он собирал все данные из двух таблиц и помещал в CSV-файл все в 1 строке для каждого заказа с данными счета и данными клиента.

Мне также нужно получить идентификатор invoice_items по идентификатору (те, которые, как мне кажется, должны быть зациклированы, как может быть, более одного элемента, но не уверены, как добавить invoice_items в запрос, а также мне нужно установить заголовки, а также столбцы, но не знаете, как).

Было бы удивительным, если это может быть так:

| детали счета-фактуры данные клиента | фактура предметов

       LIST ITEM 

           LIST ITEM 

           LIST ITEM 

вместо

детали счета | информация о клиенте | фактура Список экземпляров ЭЛЕМЕНТ LIST ПУНКТ

с реальными данными и названиями будет выглядеть примерно

ид | номер счета-фактуры | количество | имя | адрес | фактура предметов (и список ниже этой части)

PHP

header("Content-type: text/csv"); 

    // output any connection error 
    if ($mysqli->connect_error) { 
     die('Error : ('.$mysqli->connect_errno .') '. $mysqli->connect_error); 
    } 

    $file_name = 'invoice-export-'.date('d-m-Y').'.csv'; // file name 
    $file_path = 'downloads/'.$file_name; // file path 

    $file = fopen($file_path, "w"); // open a file in write mode 
    chmod($file_path, 0777); // set the file permission 

    $query_table_columns_data = "SELECT * 
            FROM invoices i 
            JOIN customers c 
            ON c.invoice = i.invoice 
            WHERE i.invoice = c.invoice 
            ORDER BY i.invoice"; 

    if ($result_column_data = mysqli_query($mysqli, $query_table_columns_data)) { 

     // fetch table fields data 
     while ($column_data = $result_column_data->fetch_row()) { 
      $table_column_data = array(); 
      foreach($column_data as $data) { 
       $table_column_data[] = $data; 
      } 

      // Format array as CSV and write to file pointer 
      fputcsv($file, $table_column_data, ",", '"'); 
     } 

    } 
+0

не может вам рамочное корыто $ table_column_data и использовать fputcsv в так что каждый счет-фактура будет на следующей строке? – driedoezoe

+0

У меня уже есть следующая строка, я думаю, что я не буду экспортировать элементы, так как не могу видеть, как я это работаю, но пытаюсь выяснить, как установить имена заголовков столбцов - любые идеи? – James

+0

Я попытался // принести титулы \t время ($ заголовков = mysqli_fetch_field ($ result_column_data)) { \t \t \t Еогеасп ($ заголовки в $ заголовка) { \t \t \t головы [] = $ header-> имя $; \t \t \t \t \t – James

ответ

1

Если я вас правильно понимаю, вы должны присоединиться к другому столу, чтобы получить позиции счета-фактуры.

Я также подозреваю, что ваш текущий пример запроса неправильно соединяет таблицы, поскольку вы, кажется, присоединяетесь к таблицам клиентов и счетов-фактур на основе счета-фактуры. Поскольку я ожидаю, что у клиента может быть много счетов-фактур, но у счет-фактуры только один клиент, я бы ожидал, что таблица счетов сохранит соответствующий идентификатор клиента, а затем сделайте соединение на основе этого.

Таким образом вы можете получить детали с чем-то вроде этого: -

SELECT i.id, 
    i.invoice_number, 
    i.amount, 
    c.name, 
    c.address, 
    ii.invoice_item 
FROM invoices i 
INNER JOIN customers c 
ON c.id = i.customer_id 
INNER JOIN invoice_items ii 
ON ii.invoice_id = i.id 
ORDER BY i.invoice 

Примечание Я переключен из SELECT * для выбора имен столбцов (которые я предполагаю, в), так как SELECT * неодобрением по разным причинам. Вы могли бы псевдоним имена столбцов, если бы вы хотели что-то более читаемое.

Но вам нужен список заголовков, взятых из названий столбцов. Предполагая, что вы не хотите просто жестко кодировать их, я бы предложил перейти от использования mysqli_fetch_row к mysqli_fetch_assoc, который вернет имена столбцов.

Затем вы можете обрабатывать имена столбцов в первой строке и выводить их.Что-то вроде этого: -

<?php 
header("Content-type: text/csv"); 

    // output any connection error 
    if ($mysqli->connect_error) { 
     die('Error : ('.$mysqli->connect_errno .') '. $mysqli->connect_error); 
    } 

    $file_name = 'invoice-export-'.date('d-m-Y').'.csv'; // file name 
    $file_path = 'downloads/'.$file_name; // file path 

    $file = fopen($file_path, "w"); // open a file in write mode 
    chmod($file_path, 0777); // set the file permission 

    $query_table_columns_data = "SELECT i.id, 
            i.invoice_number, 
            i.amount, 
            c.name, 
            c.address, 
            ii.invoice_item 
           FROM invoices i 
           INNER JOIN customers c 
           ON c.id = i.customer_id 
           INNER JOIN invoice_items ii 
           ON ii.invoice_id = i.id 
           ORDER BY i.invoice"; 

    if ($result_column_data = mysqli_query($mysqli, $query_table_columns_data)) 
    { 
     // fetch table fields data 
     if ($column_data = $result_column_data->fetch_assoc()) 
     { 
      $table_column_head = array(); 
      $table_column_data = array(); 
      foreach($column_data as $field_name->$data) 
      { 
       $table_column_head[] = $field_name; 
       $table_column_data[] = $data; 
      } 
      // Format array as CSV and write to file pointer 
      fputcsv($file, $table_column_head, ",", '"'); 
      fputcsv($file, $table_column_data, ",", '"'); 
      while ($column_data = $result_column_data->fetch_assoc()) 
      { 
       $table_column_data = array(); 
       foreach($column_data as $data) 
       { 
        $table_column_data[] = $data; 
       } 
       // Format array as CSV and write to file pointer 
       fputcsv($file, $table_column_data, ",", '"'); 
      } 
     } 
    } 

Расширения, что немного только погасила деталь счета-фактуры на первую строку для счета

<?php 
header("Content-type: text/csv"); 

    // output any connection error 
    if ($mysqli->connect_error) { 
     die('Error : ('.$mysqli->connect_errno .') '. $mysqli->connect_error); 
    } 

    $file_name = 'invoice-export-'.date('d-m-Y').'.csv'; // file name 
    $file_path = 'downloads/'.$file_name; // file path 

    $file = fopen($file_path, "w"); // open a file in write mode 
    chmod($file_path, 0777); // set the file permission 

    $query_table_columns_data = "SELECT i.id, 
            i.invoice_number, 
            i.amount, 
            c.name, 
            c.address, 
            ii.invoice_item 
           FROM invoices i 
           INNER JOIN customers c 
           ON c.id = i.customer_id 
           INNER JOIN invoice_items ii 
           ON ii.invoice_id = i.id 
           ORDER BY i.invoice"; 

    if ($result_column_data = mysqli_query($mysqli, $query_table_columns_data)) 
    { 
     // fetch table fields data 
     if ($column_data = $result_column_data->fetch_assoc()) 
     { 
      $table_column_head = array(); 
      $table_column_data = array(); 
      foreach($column_data as $field_name->$data) 
      { 
       $table_column_head[] = $field_name; 
       $table_column_data[] = $data; 
      } 
      $prev_id = $column_data['id']; 
      $prev_invoice_number = $column_data['invoice_number']; 
      $prev_amount = $column_data['amount']; 
      $prev_name = $column_data['name']; 
      $prev_address = $column_data['address']; 

      // Format array as CSV and write to file pointer 
      fputcsv($file, $table_column_head, ",", '"'); 
      fputcsv($file, $table_column_data, ",", '"'); 
      while ($column_data = $result_column_data->fetch_assoc()) 
      { 
       if ($prev_id == $column_data['id'] AND $prev_invoice_number == $column_data['invoice_number'] AND $prev_amount == $column_data['amount'] AND $prev_name == $column_data['name'] AND $prev_address == $column_data['address']) 
       { 
        $different_invoice = true; 
       } 
       else 
       { 
        $different_invoice = false; 
        $prev_id = $column_data['id']; 
        $prev_invoice_number = $column_data['invoice_number']; 
        $prev_amount = $column_data['amount']; 
        $prev_name = $column_data['name']; 
        $prev_address = $column_data['address']; 
       } 
       $table_column_data = array(); 
       foreach($column_data as $field_name->$data) 
       { 
        $table_column_data[] = (($different_invoice or $field_name == 'invoice_item') ? $data : ''); 
       } 
       // Format array as CSV and write to file pointer 
       fputcsv($file, $table_column_data, ",", '"'); 
      } 
     } 
    } 
Смежные вопросы