Voor school moet ik 2 CSV bestanden uitlezen en tot 1 database maken. Moeilijk!
Denk dit te willen oplossen door de CSV bestanden te openen met fopen().
Maar voordat ik het tot 1 gehele database kan maken moet ik beide database checken op dubbele gegevens, want stel dat 'boerharms de 2e' in beide database voorkomen moet dus niet dubbel voorkomen in de nieuwe database. Maar de databases hebben allebei ook verschillende datum weergave, zo heeft de 1 hem in m-d-y en de ander in d-m-y. Ook de plaatsnamen zijn in beide database anders geschreven, in de ene is de plaatsnaam in hoofdletters en de ander in kleine letters.
Heeft iemand een idee, hoe ik dit eenvoudig kan checken, of me ieder geval richtlijnen kan geven? Zodat ik het misschien zelf kan ontdekken?
Alvast bedankt :)
(lastig school opdrachten waar je geen les in krijgt :S)
Vrijwel iedere database kan met CSV-bestanden uit de voeten, dan met je met een paar queries al snel klaar.
Datums sla je op in een kolom van het type DATE en dus in het formaar yyyy-mm-dd. En dat ongeacht de wijze waarop je de input krijgt aangeleverd, ook daar hebben databases hele handige functies voor.
Dubbele waardes kun je voorkomen met een UNIQUE-constraint, wederom een database-eigenschap.
Gokje: Met zo'n 10 queries is jouw systeem wel te bouwen. En daar komt dus geen letter PHP-code aan te pas.
Edit: En wanneer je niet gaat normaliseren, ben je met 3 queries wel klaar. Eentje om de tabel aan te maken en 2 om de csv-bestanden te importeren.
Ik zou eerst de hele rotzooi in 1 keer in de database zetten en dan eventueel record voor record e.e.a. gaan bewerken. Dat werkt vele, vele malen sneller!
Een tijdje terug nog een soortgelijke situatie gehad, binnen een bedrijf lazen ze ook csv-bestanden uit: PHP-scriptje deed er 3 dagen over, mijn query was in 2 minuten klaar... Niet dat ik zo goed ben, dat PHP-script was gewoon zo slecht!
Jep, heb ook even met een vriend van mij overlegd, en die gaf de volgende stappen aan:
Stap1
1 bestand openen via fopen dan bewerken wat je wilt, en vervolgens in DB stoppen.
Stap 2 is volgende bestand (bestand2) weer opschonen en vergelijken met huidige DB van stap1 en dan in DB stoppen.
Eigenlijk heel simpel, maar je gaat bij zulke opdrachten altijd vet moeilijk denken tewel de oplossing vaak bij eenvoud ligt. Raar is dat eigelijk.
wat hij bedoelt is dus het tegenovergesteld van wat je vriend zegt, frank zegt eerst importeren dan aanpassen, jij/hij zegt eerst aanpassen dan importeren.
Die functie is gemaakt om een CSV bestand uit te lezen. De manier van Frank is trouwens beter, maar dan moet je thuis zijn in SQL. Voor de volledigheid de PHP manier:
<?php
$fp = fopen ('data.csv', 'rb+');
while ($data = fgetcsv ($fp, 8096, ';') {
echo '<pre>' . print_r ($data, true) . '</pre>';
}
?>