php - 通过模拟数据或使用空白替换 "NA"和空白

标签 php mysql

我对 php 和 MYSQL 非常陌生,所以这对很多人来说可能是一件非常简单的事情,但花了我几个小时。

我的开发人员创建了以下代码,用于将 csv 文件解析为一些 MYSQL 表。

一旦数据被解析到 MYSQL 表中,我就会有一个单独的脚本,用于在数据上创建一些搜索表单。例如,用户可以选择 X 列在 -50 到 +50 之间的所有数据。

我想完成两件事:

  1. 在 csv 文件中特定列的“NA”或空白的情况下,我希望它在数据库中不被识别为 0,这就是当前正在发生的情况。例如,如果我运行搜索,为 A 列选择 -10 到 10 之间的所有值,并且 A 列包含空格或“NA”,则这些空格或“NA”不应在搜索输出中被识别(并且数据库)为 0。但是,它们应该出现在每个搜索结果中。无论如何,在搜索表单中,我不想看到“NA”。我确信我不是第一个遇到这个问题的人,并且有一个最佳实践方法。

  2. 我想用空白替换 csv 文件中“的所有实例。我知道我可以使用“preg_replace”函数来实现此目的,但我不知道放置它的最佳位置。

谢谢!

<?php
ini_set('max_execution_time', 0);
ini_set('display_errors', 'On');
ini_set('error_reporting', E_ALL & ~E_NOTICE);
$global_start = microtime(true);
include_once('db.php');
$full_path = @dirname(__FILE__) . '/';
$distinct_fields = array('g', 'i', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 'y', 'z', 'aa', 'ab', 'ac', 't', 'u', 'v');


if (isset($_POST['truncate'])) {
    mysqli_query($mysqli, 'TRUNCATE TABLE odesk_nj_data');
    mysqli_query($mysqli, 'TRUNCATE TABLE odesk_nj_catalog');
}
if (isset($_POST['filename']) && is_file($full_path . $_POST['filename'])) {
    $separator = $_POST['separator'];
    $handle = fopen($full_path . $_POST['filename'], "r");
    $fields = array();
    $i = 0;
    $proccess_iteration = 0;
    mysqli_autocommit($mysqli, false);
    while (($data = fgetcsv($handle, 0, $separator)) !== FALSE) {
        if ($i == 0) {
            $fields = $data;
        } elseif ($data[0] != '') {
            $branch_id = GetBranchId($data[0]);
            $qs = 'INSERT INTO odesk_nj_data SET branch_id=' . $branch_id;
            foreach ($fields as $index => $field_name) 
            {
                if (strtolower($field_name) != 'a' /*&& strtolower($field_name)!='ad'*/) 
                {
                    $tmp = explode(',', $data[$index]);
                    // if ($data[$index] == '' || $data[$index] == 'NA') 
                    // {
                        // $value = -1000.99;
                    // } 
                    // elseif (count($tmp) == 2 && is_numeric($tmp[0]) && is_numeric($tmp[1])) 
                    if (count($tmp) == 2 && is_numeric($tmp[0]) && is_numeric($tmp[1])) 
                    {
                        $value = implode('.', $tmp);
                    } else {
                        $value = $data[$index];
                    }
                    $qs .= ', `' . strtolower($field_name) . '`="' . $value . '"';
                }
                if (in_array(strtolower($field_name), $distinct_fields)) {
                    SaveToCatalog(strtolower($field_name), $value);
                }
            }
            mysqli_query($mysqli, $qs);
        }
        $i++;
        $proccess_iteration++;
        if ($proccess_iteration > 300) {
            mysqli_commit($mysqli);
            $proccess_iteration = 0;
            mysqli_autocommit($mysqli, false);
        }
    }
    mysqli_commit($mysqli);
    echo 'Upload Complete! Was uploaded ' . ($i - 1) . ' rows.';
    exit;
}

function SaveToCatalog($FieldName, $Value)
{
    global $mysqli;
    static $data;
    if (!isset($data[$FieldName])) {
        $result = mysqli_query($mysqli, 'SELECT * FROM odesk_nj_catalog WHERE field="' . $FieldName . '" ');
        while ($item = mysqli_fetch_assoc($result)) {
            $data[$FieldName][base64_encode($item['field_value'])] = true;
        }
    }
    if (!isset($data[$FieldName][base64_encode($Value)])) {
        $result = mysqli_query($mysqli, 'SELECT * FROM odesk_nj_catalog WHERE field="' . $FieldName . '" AND field_value="' . mysqli_real_escape_string($mysqli, $Value) . '"');
        $info = mysqli_fetch_assoc($result);
        if (isset($info['id']) && $info['id'] > 0) {
            $data[$FieldName][base64_encode($Value)] = true;
        } else {
            mysqli_commit($mysqli);
            mysqli_autocommit($mysqli, true);
            $qs = 'INSERT INTO odesk_nj_catalog SET field="' . $FieldName . '", field_value="' . $Value . '"';
            mysqli_query($mysqli, $qs);
            if (mysqli_insert_id($mysqli) > 0) {
                $data[$FieldName][base64_encode($Value)] = true;
            }
            mysqli_autocommit($mysqli, false);
        }
    }
}

function GetBranchId($BranchName)
{
    global $mysqli;
    static $branches;
    if (empty($companies)) {
        $result = mysqli_query($mysqli, 'SELECT * FROM odesk_nj_branches ');
        while ($item = mysqli_fetch_assoc($result)) {
            $branches[$item['branch_name']] = $item['branch_id'];
        }
    }
    if (!isset($branches[$BranchName])) {
        $result = mysqli_query($mysqli, 'SELECT * FROM odesk_nj_branches WHERE branch_name="' . $BranchName . '"');
        $company_info = mysqli_fetch_assoc($result);
        if (isset($company_info['branch_id']) && $company_info['branch_id'] > 0) {
            $branches[$BranchName] = $company_info['branch_id'];
        } else {
            mysqli_commit($mysqli);
            mysqli_autocommit($mysqli, true);
            $qs = 'INSERT INTO odesk_nj_branches SET branch_name="' . $BranchName . '"';
            mysqli_query($mysqli, $qs);
            $branches[$BranchName] = mysqli_insert_id($mysqli);
            mysqli_autocommit($mysqli, false);
        }
    }
    return $branches[$BranchName];
}

?>
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<form enctype="multipart/form-data" method="post" action="nj_load.php">
    Filename to parse: <input type="text" name="filename" value="Table.csv"><br/>
    CSV Separator: <input type="text" name="separator" value=","><br/>
    Truncate Table before parsing: <input type="checkbox" name="truncate" checked=""><br/>
    <input type="submit" value="Parse">
</form>
</body>
</html>

最佳答案

  1. 使用NULL代替“NA”,然后是数字列。 更新表 SET col1=NULL,其中 col1='NA'

  2. 导入后,UPDATE table SET col1=NULL where col1=''。否则,我真的不知道 '' 和空白有什么区别。

关于php - 通过模拟数据或使用空白替换 "NA"和空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26749206/

相关文章:

php - 从表中删除条目并存储已删除条目中的值

php - HTML Simple Dom 和 Mysql 插入问题

php - 如何在 magento 1.8.1 上管理 log_url_info.ibd

mysql - 创建 SQL 脚本以将数据插入表 (MySQL)

python - 如何在wxpython中传递字符'素数?

mysql - AWS Aurora 是否受到与 MySQL 相同的限制?

javascript - 展开/折叠摘录和内容

php - 使用 php 客户端使用 Web 服务(Soap)

php - 发现错误 : “Column count doesn' t match value count at row 1”

Python mysql 连接器 LIKE 针对 unicode 值