如何通过ajax将数百万行从DB导出到CSV?

I have million rows in my DB. I need to export all them into csv file. The problem is that i have timeout limit error.

So. I decided to do it via ajax.

I created ajax that generates me few tmp csv files

function chunkedExport()
{
    $.ajax({
        type: "POST",
        url: "transactions/",
        dataType: "JSON",
        data: $("#transactions").serialize(),
        async: false,
        success: function(response)
        {
            if (response.status === "continue")
            {
                $("#start_from").val(response.start_from);
                $("#client_file_name").val(response.client_file_name);
                $("#file_name").val(response.tmp_file_name);
                $("#step").val(response.step);
                chunkedExport();
            } else {
                console.log('DOWNLOAD');
                $("#start_from").val(0);
                $("#client_file_name").val('');
                $("#file_name").val('');
                $("#step").val(1);
                $("#export_type").val("");
                $('#csv_format').val("");

                document.location.href = '/transactions_export_csv/'+response.client_file_name+'/'+response.tmp_file_name+'/'+response.total_iterations+'/'
            }
        },
        error: function (xhr, ajaxOptions, thrownError) {
            console.log([xhr, ajaxOptions, thrownError]);
            $("#start_from").val(0);
            $("#client_file_name").val('');
            $("#file_name").val('');
            $("#step").val(1);
            $("#export_type").val("");
            $('#csv_format').val("");
        }
    });
}

the question is how to combine them all into one csv file and download it?

展开翻译

译文

我的数据库中有100万行。 我需要将它们全部导出到csv文件中。
问题是我有超时限制错误。</ p>

所以。 我决定通过ajax来做。</ p>

我创建了一个生成少量tmp csv文件的ajax </ p>

  function chunkedExport()
{

$ .ajax({
type:“POST”,
url:“transactions /”,
dataType:“JSON”,
data:$(“#transactions”)。serialize(),
async:false,
success:function(response)
{
if if(response.status ===“continue”)
{
$(“#start_from”)。val(response.start_from); \ n $(“#client_file_name”)。val(response.client_file_name);
$(“#file_name”)。val(response.tmp_file_name);
$(“#step”)。val(response.step);

chunkedExport();
} else {
console.log('DOWNLOAD');
$(“#start_from”)。val(0);
$(“#client_file_name”)。val(' ');
$(“#file_name”)。val('');
$(“#step”)。val(1);
$(“#export_type”)。val(“”);

$('#csv_format')。 val(“”);

document.location.href ='/transactions_export_csv /'+ response.client_file_name+''''response.tmp_file_name+'/'+response.total_iterations+'/'
}
},\ n error:function(xhr,ajaxOptions,thrownError){
console.log([xhr,ajaxOptions,thrownError]);
$(“#start_from”)。val(0);
$(“#client_file_name” ).val('');
$(“#file_name”)。val('');
$(“#step”)。val(1);
$(“#export_type”)。val (“”);
$('#csv_format')。val(“”);
}
});
}
</ code> </ pre>

问题是如何将它们全部合并到一个csv文件中并下载它?</ p>
</ div>

duandong9195
duandong9195 问题是我有超时限制错误。-通过命令行运行,如果使用PDO,请使用UnBuffered查询,不要尝试输出太多。我已经用这种方式完成了超过1.5亿行(我有非常强大的服务器虽然是64Gbram)
8 个月之前 回复
douvcpx6526
douvcpx6526 我建议你通过使用cronjobs来做到这一点。用户单击下载按钮时,在数据库中创建请求。每分钟运行Cron将读取活动请求并在服务器上创建CSV文件,然后将csv链接发送给用户。
8 个月之前 回复
doumei3828
doumei3828 只是“使用ajax”并不能解决你的任何问题。就个人而言,我建议您编写CSV文件服务器端,然后在完成后下载生成的文件。第一个是可以无限制运行的后台作业,第二个是简单的静态下载。
8 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!