簡體   English   中英

如何將 JSON 限制為 MYSQL 導出到前 10K 行?

[英]How to limit JSON to MYSQL export to top 10K lines?

我正在使用 JSON 到 MYSQL 轉換 PHP 代碼,該代碼從 Z0ECD11C1D7A287401F8D17A 提要中讀取數據。 下面是我的代碼。 我遇到的問題是 JSON 提要就像 300 萬行。 我只想挑選前 10K 行,然后將其導出到 MYSQL。 如何在下面的代碼中實現這一點?

<?php
@ini_set( 'max_execution_time', 0);

require_once 'db_connect.php';

/* DEFINE TABLE NAME AND SOURCE URL HERE */
$str_tbl_name   = 'table_name';
$str_source_url = 'https://www.json-feed.com/example';

/* FETCH DATA FROM RESOURCE LINK */
$str_source_content = file_get_contents($str_source_url);
$arr_data           = json_decode($str_source_content);

$str_date_time  = date('Y-m-d H:i:s');
$str_start_date = date('Y-m-d H:i:s', strtotime($arr_data->meta->start_date));
$str_end_date   = date('Y-m-d H:i:s', strtotime($arr_data->meta->end_date));
$arr_value_sql  = [];
foreach ($arr_data->data as $data) {
    /* DATA CLEANSING */
    $data->source_subregion        = !empty($data->source_subregion) ? $con_db->real_escape_string($data->source_subregion) : null;
    $data->source_country_code     = !empty($data->source_country_code) ? $con_db->real_escape_string($data->source_country_code) : null;
    $str_input_name                = !empty($data->metadata->search_name) ? $con_db->real_escape_string($data->metadata->search_name) : null;
    $data->document_url            = !empty($data->document_url) ? $con_db->real_escape_string($data->document_url) : null;
    $str_document_tags             = !empty((array) $data->document_tags) ? $con_db->real_escape_string(serialize($data->document_tags)) : null;
    $data->document_sentiment      = !empty($data->document_sentiment) ? $con_db->real_escape_string($data->document_sentiment) : null;
    $data->source_name             = !empty($data->source_name) ? $con_db->real_escape_string($data->source_name) : null;
    $data->document_publish_date   = !empty($data->document_publish_date) ? $con_db->real_escape_string($data->document_publish_date) : null;
    $str_document_matched_keywords = !empty((array) $data->document_matched_keywords) ? $con_db->real_escape_string(implode(',', $data->document_matched_keywords)) : null;
    $data->document_language_code  = !empty($data->document_language_code) ? $con_db->real_escape_string($data->document_language_code) : null;
    $str_document_key_phrases      = !empty((array) $data->document_key_phrases) ? $con_db->real_escape_string(implode(',', $data->document_key_phrases)) : null;
    $data->document_hit_sentence   = !empty($data->document_hit_sentence) ? $con_db->real_escape_string($data->document_hit_sentence) : null;
    $data->document_hidden         = ($data->document_hidden === true) ? 'TRUE' : 'FALSE';
    $str_document_authors          = !empty($data->document_authors[0]->name) ? $con_db->real_escape_string($data->document_authors[0]->name) : null;
    $data->document_city           = !empty($data->document_city) ? $con_db->real_escape_string($data->document_city) : null;

    $str_value_sql = " ("
            . "'{$data->document_publish_date}'"
            . ", '{$data->document_url}'"
            . ", '{$data->source_name}'"
            . ", '{$str_document_authors}'"
            . ", '{$data->source_country_code}'"
            . ", '{$data->source_subregion}'"
            . ", '{$data->document_language_code}'"
            . ", '{$data->source_reach}'"
            . ", '{$data->source_ave}'"
            . ", '{$data->document_sentiment}'"
            . ", '{$str_document_key_phrases}'"
            . ", '{$str_input_name}'"
            . ", '{$str_document_matched_keywords}'"
            . ", '{$data->document_city}'"
            . ")";
    array_push($arr_value_sql, $str_value_sql);
}

只需使用計數器或數組索引,並在獲得所需的行數后從foreach中斷。

櫃台:

$counter=0;
$values=[];
foreach($arr_data->data as $data){
    array_push($values, ...);
    if($counter++>=10000)
        break;
}
//Insert rows

數組鍵(假設順序數組):

foreach($arr_data->data as $key=>$data){
    if($key>=10000)
        break;
    array_push($values, ...);
}
//Insert rows

您可以使用for loop而不是foreach

如果問題是您的 memory 用完並且無法在 API 處對結果進行分頁,但可以解碼整個內容,您可以嘗試運行第一遍以刪除不需要的元素並正常釋放 ZCD69B4957F06CD8191ZBFD3 然后處理

// Delete unwanted elements
for($i=10000; $i<count($arr_data->data); $i++) { 
    unset($arr_data->data[$i]);
}

foreach ($arr_data->data as $data) {
    // Your old loop
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM