/*
     * Generate CSV File as per Filtration
     * @param array $rowTitle
     * @param array $DataArr
     */
    public static function geterate_csvfile($rowTitle,$DataArr){
      ob_end_clean();
      $csv_output = '';

      /*
       * Get The Row Titles
       */
      foreach ($rowTitle as $key => $value) {
        $csv_output = $csv_output . $value . ',';
        
      }
      $csv_output .= "\n"; 

      /*
       * Fill data as per row title
       */
      foreach ($DataArr as $rowr) {
        foreach ($rowr as $key => $values) {
          $csv_output .= $values . ',';  
        }  
        $csv_output .= "\n";    
      }

      $filename = 'result';
      $generatedDate = date("Y-m-d H:i:s.u");
      header("Pragma: public");
      header("Expires: 0");
      header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
      header("Cache-Control: private", false);                    
      header("Content-Type: application/octet-stream");
      header("Content-Disposition: attachment; filename=\"" . $filename . " " . $generatedDate . ".csv\";" );
      header("Content-Transfer-Encoding: binary");  
      echo $csv_output;
    }

Usage:

geterate_csvfile($rowTitle,$DataArr);

Getting Data From SQL file:

Simply put it into template file

$post = $_POST['postcode'];
                $ftime = $_POST['from_date'];
                $ttime = $_POST['to_date'];
                ob_end_clean();
$csv_output = '';
                $result = $wpdb->get_results("SHOW COLUMNS FROM `order_details`");
                if (count($result) > 0) {
                    foreach($result as $row) {
                        $csv_output = $csv_output . $row->Field . ',';
                    }
                    $csv_output = substr($csv_output, 0, -1);  
                }
                $csv_output .= "\n"; 
$values = $wpdb->get_results("SELECT * FROM `order_details` WHERE `order_postcode` LIKE '%$post%' AND `time` BETWEEN '$ftime' AND '$ttime'");
                foreach ($values as $rowr) {
                    $fields = array_values((array) $rowr);                
                    $csv_output .= $rowr->id . ',';
                    $csv_output .= $rowr->order_id . ',';
                    $csv_output .= $rowr->order_name . ',';
                    $csv_output .= $rowr->order_email . ',';
                    $csv_output .= $rowr->order_address . ',';
                    $csv_output .= $rowr->order_city . ',';
                    $csv_output .= $rowr->order_postcode . ',';
                    $csv_output .= $rowr->order_total . ',';
                    $csv_output .= $rowr->sub_total . ',';
                    $csv_output .= $rowr->order_order_key . ',';
                    $csv_output .= $rowr->product_name . ',';
                    $csv_output .= $rowr->item_quantity . ',';
                    $csv_output .= $rowr->phone . ',';
                    $csv_output .= $rowr->time . ',';
                    $csv_output .= $rowr->pick_time . ',';
                    $csv_output .= $rowr->drop_time . ',';
                    $csv_output .= $rowr->status . ',';
                    $csv_output .= "\n";    
                }
                $filename = $post;
                $generatedDate = date("Y-m-d H:i:s.u");
                header("Pragma: public");
                header("Expires: 0");
                header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
                header("Cache-Control: private", false);                    
                header("Content-Type: application/octet-stream");
                header("Content-Disposition: attachment; filename=\"" . $filename . " " . $generatedDate . ".csv\";" );
                header("Content-Transfer-Encoding: binary");  
                echo $csv_output;
                exit;
PHP