> i have a script that exports the result of a mysql query to a csv file > suitable for downloading > > the code looks like > $result = mysql_query("select * from user,mjp1,mjp2,mjp3,mjp4"); > while($row = mysql_fetch_array($result)) { > $csv_output .= "$row[userid] $row[firstname] $row[lastname]\n" } > > header("Content-type: application/vnd.ms-excel"); > header("Content-disposition: csv" . date("Y-m-d") . ".xls"); print > $csv_output; > > this works fine, except that when i expand the line $csv_output > .="$row[userid] $row[firstname] $row[lastname] $row[anotherfield] > $row[anotherfield] ...\n"} -to include an increasing number of fields, it > tends to bog down the speed at which the $csv_output file can be printed. > when i have this line output 30+ fields for each row, wait time for output > file generation is almost 4-5 minutes. > > is this the most efficient way to do this? i'd like to be able to > generate > the file as quickly as possible.
Since you don't really care about the individual fields, and you are just dumping them all out anyway, this might be faster: $cvs_output .= implode(',', $row); And, actually, there's no real reason to build up this HUGE string in PHP. Just spew as you go: $result = mysql_query("select * from user,mjp1,mjp2,mjp3,mjp4"); header("Content-type: application/vnd.ms-excel"); header("Content-disposition: csv" . date("Y-m-d") . ".xls"); while($row = mysql_fetch_array($result)) { echo implode(',', $row); } Note that if you ever embed a comma in your data, then you will be generating invalid CSV... -- Like Music? http://l-i-e.com/artists.htm -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php