2015-01-03 3 views
0

мне нужно прочитать данные в Excel и сохранить в базе данных, но побежал в следующей задаче:Как сцепить столбец в одном столбце строки из разных строк

формате Excel: Spreadsheet

мне нужно сохранить данные в базе данных, но проблема в том, что в колонке сообщений колонка начинается как [1/2-PNR], что означает, что она имеет длинное сообщение, которое разделено на две части, как в [2/2-PNR]

Но это сообщение необходимо сохранить в одном столбце

такой же, как если бы сообщение типа [1/3-ADF], то есть сообщение делится на три части и необходимо сохранить в базе данных в одном столбце

Я попытался сохранить данные с помощью кода ниже, но не смог Сделай так.

Я использовал этот почтовый файл для чтения первенствовать https://code.google.com/p/php-excel-reader/downloads/detail?name=php-excel-reader-2.21.zip

<?php 
//error_reporting(0); 
$host="localhost"; 
$username="root"; 
$password=""; 
$db_name="abro"; 

mysql_connect("$host", "$username", "$password")or die("cannot connect to server"); 
mysql_select_db("$db_name")or die("cannot select db"); 
ini_set("display_errors",1); 
error_reporting(0); 
require_once 'excel_reader2.php'; 
$date=date('d-M-Y',strtotime("-1 days")); 
$actual_file=$date.".xls"; 
$xls = new Spreadsheet_Excel_Reader($actual_file); 
$success=0; 


for ($row=1;$row<=$xls->rowcount();$row++) 
{ 
    $mobile_no=$xls->val($row,1); 
    $party_name=$xls->val($row,2); 
     $message=$xls->val($row,3); 

    if($row==1) 
    { 

    } 
    else{ 
     $query="insert into party_excel set 
           party_name='".mysql_real_escape_string($party_name)."', 
           message='".mysql_real_escape_string($message)."', 
           moble_no='".mysql_real_escape_string($mobile_no)."' 
            "; 
     $query_run=mysql_query($query); 
     echo mysql_error(); 
     $success++;        
    } 


} 
if($success>0) 
{ 
    echo "file imported successfully"; 
} 

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

+0

** Примечание ** Начать использование 'mysqli_ *' или 'PDO' как' mysql_ * 'будет отстранено и будет удалено – SuperDJ

ответ

0

Первоначально, поскольку изображение трудно читать, я думал, что у вас будет столько столбцов, сколько частей в сообщении, но я понимаю, что теперь у вас столько строк, сколько частей.

Я думаю, что лучше действительно обрабатывать данные в PHP следующим образом:

$part = 1; 
$parts = 1; 
for ($row=2; $row<=$xls->rowcount(); $row++) { 
    $mobile_no=$xls->val($row,1); 
    $party_name=$xls->val($row,2); 
    if ($part < $parts) { // need to merge rows 
     $message = $message . $xls->val($row,3); 
     $part++; 
    } 
    else { // a new message 
      $message = $xls->val($row,3); 
      $pattern = "/^\[()\/()-" . $party_name . "\]/"; 
      $part = 1; 
      if (preg_match($pattern, $message, $matches)) { 
      $parts = $matches[2]; 
      } 
      else $parts = 1; 
    } 
    if ($part == $parts) { // completed a message 
     $query="insert into party_excel set 
        party_name='".mysql_real_escape_string($party_name)."', 
        message='".mysql_real_escape_string($message)."', 
        moble_no='".mysql_real_escape_string($mobile_no)."' 
            "; 
     $query_run=mysql_query($query); 
     echo mysql_error(); 
     $success++;        
    } 
} 

Я скорректировал свой цикл, чтобы начать на 2, так как вы отбрасываетесь линии 1. Я слил из нескольких частей как они есть, т. е. я не удалял индикаторы [1/2-SJF].

Кроме того, я предпочел бы выводить строки в виде CSV, а затем использовать INFILE LOAD DATA, чтобы вставить все строки в один присест самой MySQL: http://dev.mysql.com/doc/refman/5.1/en/load-data.html

Отказ от ответственности: этот код не был протестирован, специально двойной проверки $ pattern.

+0

Возможно, пожалуйста, укажите пример для первого примера – kavita

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