CVS Importeren in mySQL en UPDATEN
Ik heb een script die het volgende doet:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
if(is_file($srvroot."files/".$dataset_file)){
mysql_query("
TRUNCATE TABLE plug_importeren
") or die(mysql_error());
mysql_query("
LOAD DATA LOCAL INFILE '".$srvroot."files/".$dataset_file."'
INTO TABLE plug_importeren
FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' ;
") or die(mysql_error());
};
};
?>
if(is_file($srvroot."files/".$dataset_file)){
mysql_query("
TRUNCATE TABLE plug_importeren
") or die(mysql_error());
mysql_query("
LOAD DATA LOCAL INFILE '".$srvroot."files/".$dataset_file."'
INTO TABLE plug_importeren
FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' ;
") or die(mysql_error());
};
};
?>
Deze upload een CSV bestand en vervangt de huidige tabel met de CSV waardes.
Maar....
Ik zou graag willen dat ik niet TRUNCATE TABLE maar een UPDATE TABLE kan doen. Dus dat alleen de gewijzigde elementen aangepast worden. En het liefste zelfs alleen de nieuwe waardes toevoegen dus:
als de huidige tabel 100 waardes heeft en het nieuwe CSV 105. Dat er alleen5 bij komen in de DB tabel.
Maar hoe kan ik dit doen, en kan dit überhaupt?
Alvast bedankt!
Met vriendelijke groet,
Tom
Gewijzigd op 01/10/2010 14:55:39 door Tom Fischer
Niemand een idee?
En ik denk dat je een query moet schrijven om te vergelijken...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
//uploadlocatie
$uploaddir = './import/';
//artikel file:
$artikelgroepfile = $uploaddir . basename($_FILES['grp_file']['name']);
$grp_file = $_FILES['grp_file']['name'];
if (move_uploaded_file($_FILES['grp_file']['tmp_name'], $artikelgroepfile)){
$importGroups = true;
$importArticles = false;
$groupsFile = "import/groepen.csv" ;
$articlesFile = "import/".$grp_file ;
$firstlineContainsHeader = true;
/**
* Convert name like 'Polo T-Shirt' to 'polo_tshirt'
* @param $name The name to convert
* @return The converted name
*/
function nameToID($name) {
$name = ereg_replace("[^A-Za-z0-9 ]", "", $name);
$name = str_replace(' ', '_', $name);
$name = strtolower($name);
return $name;
}
/* Import groups */
if ($importGroups) {
$row = 1;
$handle = fopen($groupsFile, "r");
$inserted = 0;
$updated = 0;
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
$count = count($data);
if (($count == 2) && !($row == 1 && $firstlineContainsHeader)) {
$ID = nameToID($data[0]);
$name = str_replace("'", "\'", $data[1]);
$sql = "INSERT INTO `tom_cat` (`cat_id`, `cat_naam`, `cat_realname`, `cat_upper`, `cat_image`, `cat_actief`, `cat_nivo`)";
$sql .= "VALUES ('$ID', '$name', '$ID', '$ID', '0', '1', '1')";
$result = mysql_query($sql);
// if error with inserting, try to update
if (!$result) {
$sql = "UPDATE `tom_cat` SET";
$sql .= " `cat_naam` = '$name'";
$sql .= ", `cat_realname` = '$ID'";
$sql .= ", `cat_upper` = '$ID'";
$sql .= " WHERE `cat_id` = '$ID' ";
$result = mysql_query($sql);
// update failed, error!
if (!$result) {
echo "Error update tom_cat: " . mysql_error() . "<br>\n";
} else {
$updated++;
}
} else {
$inserted++;
}
}
$row++;
}
fclose($handle);
echo '<h2>Groepen</h2>';
echo $inserted . ' record(s) toegevoed<br>';
echo $updated . ' record(s) geupdate<br><br>';
}
};
};
?>
//uploadlocatie
$uploaddir = './import/';
//artikel file:
$artikelgroepfile = $uploaddir . basename($_FILES['grp_file']['name']);
$grp_file = $_FILES['grp_file']['name'];
if (move_uploaded_file($_FILES['grp_file']['tmp_name'], $artikelgroepfile)){
$importGroups = true;
$importArticles = false;
$groupsFile = "import/groepen.csv" ;
$articlesFile = "import/".$grp_file ;
$firstlineContainsHeader = true;
/**
* Convert name like 'Polo T-Shirt' to 'polo_tshirt'
* @param $name The name to convert
* @return The converted name
*/
function nameToID($name) {
$name = ereg_replace("[^A-Za-z0-9 ]", "", $name);
$name = str_replace(' ', '_', $name);
$name = strtolower($name);
return $name;
}
/* Import groups */
if ($importGroups) {
$row = 1;
$handle = fopen($groupsFile, "r");
$inserted = 0;
$updated = 0;
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
$count = count($data);
if (($count == 2) && !($row == 1 && $firstlineContainsHeader)) {
$ID = nameToID($data[0]);
$name = str_replace("'", "\'", $data[1]);
$sql = "INSERT INTO `tom_cat` (`cat_id`, `cat_naam`, `cat_realname`, `cat_upper`, `cat_image`, `cat_actief`, `cat_nivo`)";
$sql .= "VALUES ('$ID', '$name', '$ID', '$ID', '0', '1', '1')";
$result = mysql_query($sql);
// if error with inserting, try to update
if (!$result) {
$sql = "UPDATE `tom_cat` SET";
$sql .= " `cat_naam` = '$name'";
$sql .= ", `cat_realname` = '$ID'";
$sql .= ", `cat_upper` = '$ID'";
$sql .= " WHERE `cat_id` = '$ID' ";
$result = mysql_query($sql);
// update failed, error!
if (!$result) {
echo "Error update tom_cat: " . mysql_error() . "<br>\n";
} else {
$updated++;
}
} else {
$inserted++;
}
}
$row++;
}
fclose($handle);
echo '<h2>Groepen</h2>';
echo $inserted . ' record(s) toegevoed<br>';
echo $updated . ' record(s) geupdate<br><br>';
}
};
};
?>
Maar ik krijg het niet voor elkaar om het te combineren;
Gewijzigd op 04/10/2010 11:29:39 door Tom Fischer