Die "funktionierende Variante" ist aber nicht so fein.
Es ist doch quatsch, erstmal 25.000 Datensätze in ein Array zu lesen und dann für jedes Element
eine Vergleich mit den 0-24.999 anderen Datensätzen durchzuführen!
(übrigens gäbe es hierfür array_unique())
Lese die Datei Schritt für Schritt ein (fgetcsv()) und kopiere dabei jeden Pfad, der noch nicht
aufgetaucht ist in ein Array ( if (!in_array(...)) ...; ). Damit hast du alle Pfade in einem Array.
Aber davor gibt es womöglich noch ein anderes Problem. Ist dieser CSV-Import eine einmalige
Geschichte oder dient er der Synchronisation mit einer lokalen Datenbank?
Wenn letzteres der Fallist, dann würde ich mich hüten, die Daten alle so in eine CSV-Tabelle zu
verwursten. Ich hatte eine sehr ähnliche Anforderung vor ein paar Jahren mal für einen
Dachverband von Reiseanbietern und der Programmierer der lokalen Access-Geschichten war
nicht dazu zu bewegen, seine Daten mal gescheit zu strukturieren und so hatte ich dann eben auch
alles zusammengepackt in einer csv-Datei. Das musste ich dann alles auseinanderklamüsern und
dann lauter Vergleiche anstellen und Listen/Formulare ausgeben, um den Verwalter des Systems
jeweils mit Abfragen löchern zu können, ob nicht mehr vorkommende Reiseveranstalter, Länder
oder angebotene Aktivitäten gelöscht werden sollen oder ob die Benutzerkonten bzw. die Option für
die Reiseanbieter, dieses Land oder Angebot ihrem Profil zuzuordnen noch bestehen erhalten
bleiben sollen etc.
Kurz vor oder nach Abnahme rief mich dann der Admin der Access-Datenbank an, er habe sich
überlegt, dass es ja viel geschickter sei, die Daten in verschiedene Tabelle zu legen, ob er das
noch ändern könnte. Ich wäre beinahe durchs Telefon gekrochen, um ihm den Hals umzudrehen!
Und da hatte ich noch nichtmal das Problem uneindeutiger Datensätze.
Wenn du nun aber so rangehen willst/musst, dann musst du ja bei jedem
kleinen Update den kompletten Datenbestand neu hochladen. Andernfalls
hast du ja keine Möglichkeit, Kategorien zu verschieben, da du diese ja
ausschließlich anhand des Pfades identifizierst. Dabei kommt es natürlich
zu unschönen Effekten für die Besucher, da die IDs der Kategorien ja neu
vergeben werden und so dann plötzlich Limks (Bookmarks) auf falschen
Seiten oder 404ern landern.
Mein Rat: Schau nochmal, ob du die zu importierende Datenquelle anders verfügbar machen
kannst. Wenn die aus einer Datenbank des Kunden kommen, dann werden die ja hoffentlich
normalisiert vorliegen und dann pack dir einfach die CSV-Daten aller Tabellen in eine Datei
und du hast den ganzen Streß nicht.
Basti
Es ist doch quatsch, erstmal 25.000 Datensätze in ein Array zu lesen und dann für jedes Element
eine Vergleich mit den 0-24.999 anderen Datensätzen durchzuführen!
(übrigens gäbe es hierfür array_unique())
Lese die Datei Schritt für Schritt ein (fgetcsv()) und kopiere dabei jeden Pfad, der noch nicht
aufgetaucht ist in ein Array ( if (!in_array(...)) ...; ). Damit hast du alle Pfade in einem Array.
Aber davor gibt es womöglich noch ein anderes Problem. Ist dieser CSV-Import eine einmalige
Geschichte oder dient er der Synchronisation mit einer lokalen Datenbank?
Wenn letzteres der Fallist, dann würde ich mich hüten, die Daten alle so in eine CSV-Tabelle zu
verwursten. Ich hatte eine sehr ähnliche Anforderung vor ein paar Jahren mal für einen
Dachverband von Reiseanbietern und der Programmierer der lokalen Access-Geschichten war
nicht dazu zu bewegen, seine Daten mal gescheit zu strukturieren und so hatte ich dann eben auch
alles zusammengepackt in einer csv-Datei. Das musste ich dann alles auseinanderklamüsern und
dann lauter Vergleiche anstellen und Listen/Formulare ausgeben, um den Verwalter des Systems
jeweils mit Abfragen löchern zu können, ob nicht mehr vorkommende Reiseveranstalter, Länder
oder angebotene Aktivitäten gelöscht werden sollen oder ob die Benutzerkonten bzw. die Option für
die Reiseanbieter, dieses Land oder Angebot ihrem Profil zuzuordnen noch bestehen erhalten
bleiben sollen etc.
Kurz vor oder nach Abnahme rief mich dann der Admin der Access-Datenbank an, er habe sich
überlegt, dass es ja viel geschickter sei, die Daten in verschiedene Tabelle zu legen, ob er das
noch ändern könnte. Ich wäre beinahe durchs Telefon gekrochen, um ihm den Hals umzudrehen!
Und da hatte ich noch nichtmal das Problem uneindeutiger Datensätze.
Wenn du nun aber so rangehen willst/musst, dann musst du ja bei jedem
kleinen Update den kompletten Datenbestand neu hochladen. Andernfalls
hast du ja keine Möglichkeit, Kategorien zu verschieben, da du diese ja
ausschließlich anhand des Pfades identifizierst. Dabei kommt es natürlich
zu unschönen Effekten für die Besucher, da die IDs der Kategorien ja neu
vergeben werden und so dann plötzlich Limks (Bookmarks) auf falschen
Seiten oder 404ern landern.
Mein Rat: Schau nochmal, ob du die zu importierende Datenquelle anders verfügbar machen
kannst. Wenn die aus einer Datenbank des Kunden kommen, dann werden die ja hoffentlich
normalisiert vorliegen und dann pack dir einfach die CSV-Daten aller Tabellen in eine Datei
und du hast den ganzen Streß nicht.
Basti
Kommentar