繁体   English   中英

mysql查询从csv文件到mysql db的插入记录

[英]Mysql query for insert records from csv file to mysql Db

我正在尝试将csv文件中的数据插入mysql数据库。 数据已插入数据库。 但不是我所期望的那样。 就我而言,有几个text文件,其中包括employee iddatein timeout time 另外,如果要记录同一雇员编号和日期相同的记录,则不允许插入任何数据。

我的密码

$fdate = array_filter(explode(" ", $y));

$csv->emp_id = $epf;
$a_date = date("Y-m-d", strtotime($fdate[9]));
$csv->date= $a_date;

$csv->save();

$check = "SELECT * FROM daily_attendances WHERE emp_id = $epf AND date = '$a_date'";

$sql = DB::select(DB::raw($check));
$count = count($sql);

if($count > 0){
  if ($fdate[11] == "AM") {
        $update_query = "UPDATE daily_attendances SET in_time = '$fdate[10]'  WHERE 
       emp_id = $epf AND date = '$a_date'";
       $sql = DB::select(DB::raw($update_query));

                            } elseif ($fdate[11] == "PM") {
                                $o_time = date("H:i:s", strtotime($fdate[10] . $fdate[11]));
                                $update_query = "UPDATE daily_attendances SET out_time = '$o_time'  WHERE emp_id = $epf AND date = '$a_date'";
                                $sql = DB::select(DB::raw($update_query));


                            }

电流输出

在此处输入图片说明

预期产量 在此处输入图片说明

我建议首先使用MySQL的LOAD DATA将CSV数据加载到临时表中。 完成此操作后,可以使用查询按照以下内容将其插入目标daily_attendances表中:

INSERT INTO daily_attendances (emp_id, date, in_time, out_time)
SELECT emp_id, date, MAX(in_time), MAX(out_time)
FROM temp
GROUP BY emp_id, date

该答案假定唯一重复或丢失的数据就是您向我们显示的问题。 通常,使用LOAD DATA可以最快地从CSV引入大量新数据。 同样,您需要整理数据的逻辑类型也应在数据库中处理。

最好使用SQL查询进行检查。

INSERT INTO TABLE_2 (id, name) SELECT t1.id,t1.name
FROM TABLE_1 t1
WHERE NOT EXISTS(SELECT id FROM TABLE_2 t2 WHERE t2.id = t1.id)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM