[英]Mysql query for insert records from csv file to mysql Db
我正在尝试将csv
文件中的数据插入mysql
数据库。 数据已插入数据库。 但不是我所期望的那样。 就我而言,有几个text
文件,其中包括employee id
, date
, in time
和out 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.