CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
03.06.2005, 09:30:25
|
|
Anfänger
|
|
Registriert seit: Aug 2003
Beiträge: 45
|
|
Datei in DB importieren ohne doppelte
Hallo,
habe folgendes Problem.
Habe in einer csv Datei diverse Nummern stehen. Alle untereinander.
Die importiere ich so in die DB:
PHP-Code:
$datei = "nummern.csv";
$array = file($datei);
for($x=0;$x<count($array);$x++){
if (!empty($array[$x])){
$sql = "INSERT INTO nummern (`id`, `datum`, `wie_eingetragen`, `nummer`) VALUES ('','$datum', '$wie_eingetragen', '$array[$x]')";
mysql_query($sql);
echo $array[$x];
echo "<br>";
}else{
echo "Keine Faxnummer vorhanden.<br>";
}
}
Es sind aber schon Nummern in der DB vorhanden. Wie kann ich verhindern das die Nummern doppelt eingetragen werden?
__________________
Never change a running system!
|
03.06.2005, 09:43:06
|
|
Junior Member
|
|
Registriert seit: Apr 2005
Beiträge: 401
|
|
AW: Datei in DB importieren ohne doppelte
Du kannst im Nachhinein eine Dublettenprüfung machen
http://www.selfphp.de/forum/showthread.php?t=10649
oder aber due trägst jeden Datensatz einzeln ein und prüfst vorher ob er schon vorhanden ist...das ist aber sehr underperformant
|
03.06.2005, 09:44:37
|
|
Anfänger
|
|
Registriert seit: Aug 2003
Beiträge: 45
|
|
AW: Datei in DB importieren ohne doppelte
Zitat:
Zitat von dachris
oder aber due trägst jeden Datensatz einzeln ein und prüfst vorher ob er schon vorhanden ist...das ist aber sehr underperformant
|
Wie mache ich denn das? Wäre egal wenn es nicht so performant wäre. läuft nur lokal auf meinem rechner nicht online.
__________________
Never change a running system!
|
03.06.2005, 09:44:55
|
SELFPHP Guru
|
|
Registriert seit: Jul 2002
Ort: Oberursel
Alter: 54
Beiträge: 4.748
|
|
AW: Datei in DB importieren ohne doppelte
Du könntest
a) vor jedem INSERT prüfen, ob's den Wert schon gibt
b) die Tabelle vorher TRUNCATEn
c) das Feld nummer auf PRIMARY KEY stellen, aber dann ist ID natürlich futsch
d) oder das: ALTER TABLE tabelle ADD UNIQUE ( nummer )
Und vor allem solltest Du an trim() denken:
--> http://php.net/trim
|
03.06.2005, 09:47:34
|
|
Anfänger
|
|
Registriert seit: Aug 2003
Beiträge: 45
|
|
AW: Datei in DB importieren ohne doppelte
Hi,
also die Beste Lösung für mich wäre denke ich wenn ich vor dem eintragen jeden wert prüfen würde und falls vorhanden diese zeile überspringen und mit der nächsten weiter machen.
wie kann mir trim() helfen? Habe weder leerzeichen, sonderzeichen noch sonst irgendwas nur die reine zahl 02345678987 in einer zeile stehen.
__________________
Never change a running system!
|
03.06.2005, 09:50:10
|
SELFPHP Guru
|
|
Registriert seit: Jul 2002
Ort: Oberursel
Alter: 54
Beiträge: 4.748
|
|
Zitat:
Zitat von Pixelschubser
also die Beste Lösung für mich wäre denke ich wenn ich vor dem eintragen jeden wert prüfen würde und falls vorhanden diese zeile überspringen und mit der nächsten weiter machen
|
Das ist doch allerhöchstens ein nur-im-absoluten-Notfall-Workaround! Aber lokal sei das fast verziehen.
Zitat:
Zitat von Pixelschubser
wie kann mir trim() helfen? Habe weder leerzeichen, sonderzeichen noch sonst irgendwas nur die reine zahl 02345678987 in einer zeile stehen.
|
Doch, Du hast das/die Zeichen für den Zeilenumbruch noch an dem String. Mag egal sein, muss aber nicht.
|
03.06.2005, 09:52:27
|
Junior Member
|
|
Registriert seit: Apr 2003
Ort: TÜ
Beiträge: 337
|
|
AW: Datei in DB importieren ohne doppelte
Hi zusammen,
um zu verhindern, daß Nummern doppelt eingetragen werden hilft auch ein INSERT ... ON DUPLICATE KEY IGNORE... (oder so ähnlich, => Manual ;-)). Vorher muß die Spalte natürlich mit UNIQUE definiert sein.
Der Thread, den dachris genannt hat hilft Dir hier weniger, eher schon folgender:
http://www.selfphp.com/forum/showthread.php?t=10531
Zum im Nachhinein doppelte Einträge zu eliminieren hilft Dir allerdings der von dachris genannte Thread weiter, auch wenn die dortigen Lösungen (von mir) auch nicht immer das Gelbe vom Ei sind, da ziemlich rechenaufwändig oder nicht komplett (...HAVING...).
Gruß,
Andy
|
03.06.2005, 09:53:42
|
|
Anfänger
|
|
Registriert seit: Aug 2003
Beiträge: 45
|
|
AW: Datei in DB importieren ohne doppelte
Hi,
ja das / ist egal.
Nur wie prüfe ich ob vorhanden oder nicht und springe eine zeile weiter?
Sonst muss ich jede nummer per hand eintragen und dann sitze ich noch 3 wochen hier.... ;)
__________________
Never change a running system!
|
03.06.2005, 09:57:36
|
SELFPHP Guru
|
|
Registriert seit: Jul 2002
Ort: Oberursel
Alter: 54
Beiträge: 4.748
|
|
Na einfach ein so:
Code:
mysql_query(SELECT id FROM tabelle WHERE id=array[x])
if (mysql_num_rows(result)<1) {
mysql_query(INSERT...)
}
Und mach doch einfach UNIQUE aus dem Feld und Ruhe ist. Warum dieser Umwegwunsch?!
Geändert von c4 (03.06.2005 um 09:58:13 Uhr)
|
03.06.2005, 10:08:28
|
|
Anfänger
|
|
Registriert seit: Aug 2003
Beiträge: 45
|
|
AW: Datei in DB importieren ohne doppelte
Hi
hab es so versucht
PHP-Code:
$datei = "nummern.csv";
$array = file($datei);
for($x=0;$x<count($array);$x++){
if (!empty($array[$x])){
$test_query = "SELECT nummer FROM testnum WHERE nummer ='".$array[x]."'";
if(mysql_num_rows($test_query)<1){
$sql = "INSERT INTO testnum (`id`, `datum`, `wie_eingetragen`, `nummer`) VALUES ('','$datum', '$wie_eingetragen', '$array[$x]')";
mysql_query($sql);
echo $array[$x];
echo "<br>";
}
}else{
echo "Keine Faxnummer vorhanden.<br>";
}
}
geht aber leider nicht...passiert gar nichts
__________________
Never change a running system!
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 15:45:58 Uhr.
|