Ik heb in een tabel gedefinieerd welke kolommen uit welk bestand naar welke SQL tabel / kolom moeten.
Voorbeeld:
Bestand A | Kolom A | tabel1 | kolom1
Bestand A | Kolom B | tabel 1 | kolom 2
Bestand A | Kolom D | tabel 2 | kolom 1
Bestand A | Kolom H | tabel 2 | kolom 2
Ik kan deze nummering (kolom A,B,D,H) vergelijken met een loopnummering, maar dan krijg ik vervolgens 4 losse query's.
Nu wil ik dat de eerste 2 en de laatste 2 samengevoegd worden. Ze moeten immers naar dezelfde tabel.
Hopelijk heb ik t zo duidelijk genoeg uitgelegd.
Wie kan me helpen en zorgen dat deze waarden samen komen tot 1 insert query?
Mathijs
[size=xsmall]Toevoeging op 23/02/2011 18:23:14:[/size]
Ik denk dat ik een oplossing heb gevonden, correct me if i'm wrong:
// als de rij voorkomt aan array toevoegen. Ik maak in de variabele $import een array waarde met de tabelnaam, onderverdeeld in een array met de kolom + de waarde:
$import["tabelnaam"] = array("kolom"=>"waarde1","kolom2"=>"waarde2");
groeperen bij "tabel"
{
sql insert per tabel, met kolom -> waarde
}
Ik snap je argument nog niet bepaald, maar geef maar een voorbeeld.
Moet ik dus voor al mijn 15 bestanden, sommigen met meer dan 1000 records, tabellen aanmaken, alles importeren, dan uitlezen en dan wegschrijven weer? Lijkt mij een onzinnige methode. Zeker als je daarvan 5 bestanden elke dag doet.
Het volgende script gebruik ik ervoor. Aangepast aan jou wens natuurlijk.
Hiermee voeg ik gemakkelijk mijn csv bestanden van meer dan 75000 regels toe aan de database.
<?php
if (($handle = fopen("joubestand.csv", "r")) !== FALSE)
{
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
$num = count($data);
Dat dan voor iedere tabel, en dan uitlezen. Dan is het in ieder geval samengevoegd.
Goede methode, maar, als ik het nu uitlees, krijg ik telkens alleen de laatste waarde.
$import = array();
$import["tabelnaam"] = array("kolom1"=>"waarde1","kolom2"=>"waarde2","kolom3"=>"waarde3");
$import["tabelnaam2"] = array("kolom1a"=>"waarde1a","kolom2a"=>"waarde2a","kolom3a"=>"waarde3a");
$import["tabelnaam3"] = array("kolom1b"=>"waarde1b","kolom2b"=>"waarde2b","kolom3b"=>"waarde3b");
foreach ($import as $tabel => $values)
{
echo $tabel."<br/>";
foreach ($values as $kolom => $waarde);
{
echo $waarde." moet naar ".$kolom."<br/>";
}
echo "<br/>";
}
Wat doe ik fout?
Dit is mijn resultaat:
tabelnaam
waarde3 moet naar kolom3
tabelnaam2
waarde3a moet naar kolom3a
tabelnaam3
waarde3b moet naar kolom3b
[size=xsmall]Toevoeging op 23/02/2011 20:25:44:[/size]
Tur min op 23/02/2011 20:20:08
Het volgende script gebruik ik ervoor. Aangepast aan jou wens natuurlijk.
Hiermee voeg ik gemakkelijk mijn csv bestanden van meer dan 75000 regels toe aan de database.
Beste Tur min,
Zo ver was ik ook al, maar... Ik heb mijn verwijzingen in een tabel staan omdat het om 15 verschillende bestanden gaat en op den duur er ook bestanden bijkomen!