2013-10-16 61 views
0

你好,我正在從mysql表中導出數據到excel,我使用了一個流行的代碼在互聯網上流傳的excel導出。問題是,在我的SQL查詢中,我正在從表中選擇幾個結果,結果應放在同一個Excel單元格中。mysql導出到單excell單元不同的記錄

基本上在列名「titulo」和「status」的excel單元格中有表格的variouse結果,現在它只列出一個結果,我想將所有結果放在一個excel單元格中,例如逗號。

下面是與SQL轉儲代碼:

$sql = "SELECT users.*, cursos.titulo, subscriptions.status 
FROM users 
LEFT OUTER JOIN subscriptions 
ON users.userID = subscriptions.user_id 
LEFT OUTER JOIN cursos 
ON cursos.id = subscriptions.curso_id"; 



//Optional: print out title to top of Excel or Word file with Timestamp 
//for when file was generated: 
//set $Use_Titel = 1 to generate title, 0 not to use title 
$Use_Title = 0; 
//define date for title: EDIT this to create the time-format you need 
$now_date = DATE('m-d-Y H:i'); 
//define title for .doc or .xls file: EDIT this if you want 
$title = "Dump For Table $DB_TBLName from Database $DB_DBName on $now_date"; 
/* 

Leave the connection info below as it is: 
just edit the above. 

(Editing of code past this point recommended only for advanced users.) 
*/ 
//create MySQL connection 
$Connect = @MYSQL_CONNECT($DB_Server, $DB_Username, $DB_Password) 
    or DIE("Couldn't connect to MySQL:<br>" . MYSQL_ERROR() . "<br>" . MYSQL_ERRNO()); 
//select database 
$Db = @MYSQL_SELECT_DB($DB_DBName, $Connect) 
    or DIE("Couldn't select database:<br>" . MYSQL_ERROR(). "<br>" . MYSQL_ERRNO()); 
//execute query 
$result = @MYSQL_QUERY($sql,$Connect) 
    or DIE("Couldn't execute query:<br>" . MYSQL_ERROR(). "<br>" . MYSQL_ERRNO()); 

//if this parameter is included ($w=1), file returned will be in word format ('.doc') 
//if parameter is not included, file returned will be in excel format ('.xls') 
IF (ISSET($w) && ($w==1)) 
{ 
    $file_type = "msword"; 
    $file_ending = "doc"; 
}ELSE { 
    $file_type = "vnd.ms-excel"; 
    $file_ending = "xls"; 
} 
//header info for browser: determines file type ('.doc' or '.xls') 
HEADER("Content-Type: application/$file_type"); 
HEADER("Content-Disposition: attachment; filename=MDT_DB_$now_date.$file_ending"); 
HEADER("Pragma: no-cache"); 
HEADER("Expires: 0"); 

/* Start of Formatting for Word or Excel */ 

IF (ISSET($w) && ($w==1)) //check for $w again 
{ 
    /* FORMATTING FOR WORD DOCUMENTS ('.doc') */ 
    //create title with timestamp: 
    IF ($Use_Title == 1) 
    { 
     ECHO("$title\n\n"); 
    } 
    //define separator (defines columns in excel & tabs in word) 
    $sep = "\n"; //new line character 

    WHILE($row = MYSQL_FETCH_ROW($result)) 
    { 
     //set_time_limit(60); // HaRa 
     $schema_insert = ""; 
     FOR($j=0; $j<mysql_num_fields($result);$j++) 
     { 
     //define field names 
     $field_name = MYSQL_FIELD_NAME($result,$j); 
     //will show name of fields 
     $schema_insert .= "$field_name:\t"; 
      IF(!ISSET($row[$j])) { 
       $schema_insert .= "NULL".$sep; 
       } 
      ELSEIF ($row[$j] != "") { 
       $schema_insert .= "$row[$j]".$sep; 
       } 
      ELSE { 
       $schema_insert .= "".$sep; 
       } 
     } 
     $schema_insert = STR_REPLACE($sep."$", "", $schema_insert); 
     $schema_insert .= "\t"; 
     PRINT(TRIM($schema_insert)); 
     //end of each mysql row 
     //creates line to separate data from each MySQL table row 
     PRINT "\n----------------------------------------------------\n"; 
    } 
}ELSE{ 
    /* FORMATTING FOR EXCEL DOCUMENTS ('.xls') */ 
    //create title with timestamp: 
    IF ($Use_Title == 1) 
    { 
     ECHO("$title\n"); 
    } 
    //define separator (defines columns in excel & tabs in word) 
    $sep = "\t"; //tabbed character 

    //start of printing column names as names of MySQL fields 
    FOR ($i = 0; $i < MYSQL_NUM_FIELDS($result); $i++) 
    { 
     ECHO MYSQL_FIELD_NAME($result,$i) . "\t"; 
    } 
    PRINT("\n"); 
    //end of printing column names 

    //start while loop to get data 
    WHILE($row = MYSQL_FETCH_ROW($result)) 
    { 
     //set_time_limit(60); // HaRa 
     $schema_insert = ""; 
     FOR($j=0; $j<mysql_num_fields($result);$j++) 
     { 
      IF(!ISSET($row[$j])) 
       $schema_insert .= "NULL".$sep; 
      ELSEIF ($row[$j] != "") 
       $schema_insert .= "$row[$j]".$sep; 
      ELSE 
       $schema_insert .= "".$sep; 
     } 
     $schema_insert = STR_REPLACE($sep."$", "", $schema_insert); 
     //following fix suggested by Josue (thanks, Josue!) 
     //this corrects output in excel when table fields contain \n or \r 
     //these two characters are now replaced with a space 
     $schema_insert = PREG_REPLACE("/\r\n|\n\r|\n|\r/", " ", $schema_insert); 
     $schema_insert .= "\t"; 
     PRINT(TRIM($schema_insert)); 
     PRINT "\n"; 
    } 
    } 

?> 

所以現在在PHP中,這是做什麼取決於user_id是訂閱表內有多少次是從出口表的用戶的所有數據。我想可以把從訂閱表中的信息一個Excel單元格內爲每個用戶

cursos database

enter image description here

我認爲現在的問題是,也許SQL查詢是不正確的因爲現在它從訂閱表每場比賽創造了新的陣列和它只是diferent領域TITULO和狀態

+0

你可能想[GROUP_CONCAT()](http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html) –

+0

出於興趣,爲什麼你把大寫的所有PHP代碼?看到...... PL/SQL背景很奇怪嗎? ;-) – Flukey

回答

0

用戶列出所有的infromation這是產生XLS或CSV文件,簡單的本地機器代碼,修改爲按您的需求

SELECT * FROM table INTO OUTFILE 'c:/folder/excel.csv' 
FIELDS TERMINATED BY ',' ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n';