AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

mysql INSERT INTO / Duplicates

Ein Thema von toms · begonnen am 13. Mai 2007 · letzter Beitrag vom 13. Mai 2007
Antwort Antwort
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#1

mysql INSERT INTO / Duplicates

  Alt 13. Mai 2007, 10:35
Hallo

Ich importiere in eine Tabelle die Daten einer Txt Datei.
Wie kann ich am einfachsten überprüfen, ob ein User schon in der Tabelle existiert und
wenn das der Fall ist, nicht nochmals hinzufügen?


Code:
$db = mysql_connect($sql_db,$sql_id,$sql_pwd);
$db_ok = mysql_select_db($dbName,$db);

// Text Datei öffnen
$fp = fopen($feedfile, 'r');
while($row = fgets($fp, 1024)) { 
  $row = explode(',', str_replace('"', '', $row));

  $user = $row[0];
  $password = $row[1];
  $email = $row[2];

// hier überprüfen, ob der $user schon in der Tabelle ist...

$sql = "INSERT INTO users2 (user, password, email) VALUES ('$user','$password','$email')";
mysql_query($sql) or die(mysql_error());
flush();
}
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: mysql INSERT INTO / Duplicates

  Alt 13. Mai 2007, 10:46
2 Möglichkeiten:

Vor jedem Insert in die Tabelle ein Select darauf ausführen und nach dem User suchen.

oder

wenn die Textdatei bereits sortiert nach name vorliegt, so kannst du den jeweils letzten eingelesenen Datensatz im Speicher halten und dann jeweils prüfen, ob der neu eingelesene mit dem im Speicher vorliegenden übereinstimmt.

Letzte Variante ist wohl effektiver da Du dir die Selects sparst. Dafür muss die Text Datei aber sortiert vorliegen.

Wenn es sich aber eh nur um 1000 Datensätze handelt, so würd ich erste Variante wählen, da wohl am schnellsten implementiert.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#3

Re: mysql INSERT INTO / Duplicates

  Alt 13. Mai 2007, 10:56
Zitat von Jelly:
2 Möglichkeiten:

Vor jedem Insert in die Tabelle ein Select darauf ausführen und nach dem User suchen.
Danke Jelly!
Werde mich wohl für die erste Variante entscheiden. Es werden nur ca. 100 - 200 Datensätze sein.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#4

Re: mysql INSERT INTO / Duplicates

  Alt 13. Mai 2007, 11:07
So ein ähnliches Problem hat ich auch schon mal:
Vielleicht hilft es dir ja weiter: Theard
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#5

Re: mysql INSERT INTO / Duplicates

  Alt 13. Mai 2007, 11:15
Zitat von arbu man:
So ein ähnliches Problem hat ich auch schon mal:
Vielleicht hilft es dir ja weiter: Theard

Habe auch von dem "ON DUPLICATE" gelesen.
Mir ist aber nicht ganz klar, wie ich das anwenden muss. d.h eine Ueberpruefung auf $user..
Thomas
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: mysql INSERT INTO / Duplicates

  Alt 13. Mai 2007, 12:55
Hallo Thomas,

sobald du ein UNIQUE Constraint auf der Spalte USER eingerichtet hast, führt der Server die ON DUPLICATE Klausel selbsttätig aus - wenn deine Server-Version diese Syntax bereits unterstützt.

Freundliche Grüße
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz