Beste PHPHelpers,

Ik heb een script die het volgende doet:


<?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());
			
			};		
		};
?>


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
Maak van de TRUNCATE -> UPDATE??
En ik denk dat je een query moet schrijven om te vergelijken...
Ja ik heb wel een ander script bekeken, dat een beetje op zo'n manier werkt:


<?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>';
		}
		
	
	};
};
?>


Maar ik krijg het niet voor elkaar om het te combineren;

Reageren