SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 17.07.2006, 21:58:04
Mike² Mike² ist offline
Anfänger
 
Registriert seit: Jul 2006
Ort: Berlin
Alter: 43
Beiträge: 17
Doppelte Einträge vermeiden...

Hallo Zusammen,

nachdem ich mich jetzt ein wenig durch die Suche gearbeitet habe, hänge ich immer noch an meinem Problem fest.

Ich lasse mir in meinen PHP-Script durch folgenden Code Eintragungen in meine DB machen:
PHP-Code:
   mysql_query("INSERT INTO tabelle (userid, first, last, name, type, punkte, summe) VALUES ('$UserID', '$First', '$Last', '$Name', '$Type', '$Punkte', '$Summe') or die("<br>Fehler beim verarbeiten der DatenbankFehlermeldung".mysql_error()); 
Funktioniert auch optimal.
Nur ist das Problem, das bei jedem Eintrag eine komplett neue Zeile eingefügt wird.

Die Variable '$Name' soll aber in Zusammenhang mit der '$UserID' nur einmal vorkommen.
D. h. die Datenbank sollte zuerst überprüft werden, ob der Wert '$Name' bereits vorhanden ist.
Und wenn ja, dann nur ein UPDATE der Zeile ausfüren und nicht die Zeile zusätzlich einfügen.

Ich hoffe, ich konnte es verständlich rüberbringen.

Gruß Mike²

Geändert von Mike² (22.07.2006 um 15:54:56 Uhr)
Mit Zitat antworten
  #2  
Alt 17.07.2006, 22:14:17
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Doppelte Einträge vermeiden...

Hast du dir schon mal die Klausel INSERT ... ON DUPLICATE KEY UPDATE oder REPLACE angesehen?
Mit Zitat antworten
  #3  
Alt 17.07.2006, 23:04:07
Mike² Mike² ist offline
Anfänger
 
Registriert seit: Jul 2006
Ort: Berlin
Alter: 43
Beiträge: 17
AW: Doppelte Einträge vermeiden...

Ja, das habe ich bereits.
Doch es wird immer von einem Unique im Feld gesprochen.
Dies kann ich ja aber wegen den verschiedenen UserID´s nicht machen. Oder?

Ich hab mir so was in etwa vorgestellt:
PHP-Code:
if(??? UserID Name bereits vorhanden ???)
{
mysql_query("UPDATE tabelle (userid, first, last, name, type, punkte, summe) VALUES ('$UserID', '$First', '$Last', '$Name', '$Type', '$Punkte', '$Summe')");
}
else
{
mysql_query("INSERT INTO tabelle (userid, first, last, name, type, punkte, summe) VALUES ('$UserID', '$First', '$Last', '$Name', '$Type', '$Punkte', '$Summe')");

Ist das auch so realisierbar???

Geändert von Mike² (17.07.2006 um 23:04:29 Uhr)
Mit Zitat antworten
  #4  
Alt 18.07.2006, 08:48:15
KTB KTB ist offline
Member
 
Registriert seit: Mar 2006
Alter: 39
Beiträge: 599
AW: Doppelte Einträge vermeiden...

Klar ist das so realisierbar. Du musst dann blos vorher durch die Tabelle laufen und nach dem Datensatz suchen. Wenn du ein leeres Ergebnis zurück bekommst, "INSERT" sonst "UPDATE".
__________________
In der Ruhe liegt die Kraft!
Mit Zitat antworten
  #5  
Alt 18.07.2006, 10:03:35
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Doppelte Einträge vermeiden...

Was spricht dagegen einen UNIQUE-Index über die Spalte name zu legen?
Mit Zitat antworten
  #6  
Alt 18.07.2006, 16:37:49
Mike² Mike² ist offline
Anfänger
 
Registriert seit: Jul 2006
Ort: Berlin
Alter: 43
Beiträge: 17
AW: Doppelte Einträge vermeiden...

Zitat:
Zitat von KTB
Klar ist das so realisierbar. Du musst dann blos vorher durch die Tabelle laufen und nach dem Datensatz suchen. Wenn du ein leeres Ergebnis zurück bekommst, "INSERT" sonst "UPDATE".
Jetzt ist nur noch die Frage, wie ich sowas realisiere? Kleiner Denkanstoß?


Zitat:
Zitat von xabbuh
Was spricht dagegen einen UNIQUE-Index über die Spalte name zu legen?
Wenn ich nen Unique über die Spalte "name" lege, kann der Wert ja nur einmal komplett gleich vorhanden sein.
Ich möchte es aber in Abhänigkeit der UserID, d.h. jeder User kann den Wert einmal besitzen.
Mit Zitat antworten
  #7  
Alt 18.07.2006, 18:49:28
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Doppelte Einträge vermeiden...

Zitat:
Zitat von Mike²
Wenn ich nen Unique über die Spalte "name" lege, kann der Wert ja nur einmal komplett gleich vorhanden sein.
Ich möchte es aber in Abhänigkeit der UserID, d.h. jeder User kann den Wert einmal besitzen.
Du willst also, dass lediglich die Kombination aus UserID und Name eindeutig sein muss? Dann lege doch einen UNIQUE-Index über diese beiden Spalten:
Code:
CREATE UNIQUE INDEX id_name ON tabelle (UserID, Name);
Mit Zitat antworten
  #8  
Alt 19.07.2006, 18:32:23
Mike² Mike² ist offline
Anfänger
 
Registriert seit: Jul 2006
Ort: Berlin
Alter: 43
Beiträge: 17
AW: Doppelte Einträge vermeiden...

Zitat:
Zitat von xabbuh
Du willst also, dass lediglich die Kombination aus UserID und Name eindeutig sein muss? Dann lege doch einen UNIQUE-Index über diese beiden Spalten:
Code:
CREATE UNIQUE INDEX id_name ON tabelle (UserID, Name);
Also das ist wohl nicht ganz das, was ich suche.
Es soll ganz einfach ein Unique des "Name"-Wertes vorhanden sein der sich auf die UserID bezieht.
Vielleicht bringe ich das nicht verständlich genug rüber... :-(
Aber ohne ne Abfrage wird das nicht klappen.
Wirklich niemand nen Ansatz?
Mit Zitat antworten
  #9  
Alt 19.07.2006, 18:43:35
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Doppelte Einträge vermeiden...

Zitat:
Zitat von Mike²
Es soll ganz einfach ein Unique des "Name"-Wertes vorhanden sein der sich auf die UserID bezieht.
Vielleicht bringe ich das nicht verständlich genug rüber... :-(
Scheinbar nicht. Woran machst du fest, ob ein Name eindeutig ist? Am besten zeigst mal ein paar Beispieldatensätze, was bei dir Eindeutigkeit bedeuten würde und was nicht.
Mit Zitat antworten
  #10  
Alt 19.07.2006, 19:37:26
Mike² Mike² ist offline
Anfänger
 
Registriert seit: Jul 2006
Ort: Berlin
Alter: 43
Beiträge: 17
AW: Doppelte Einträge vermeiden...

Eigentlich ist es ganz simpel:
Die Daten werden durch einen Parser ausgelesen und sollen in die DB geschrieben werden.
In etwa sieht das dann so aus:

Code:
userid | name                 | gebdatum   | ort       | famstand
-----------------------------------------------------------------
12110  | ottowalkes           | 10.01.2000 | koeln     | ledig
12110  | sylversterstallone   | 15.06.1981 | berlin    | verheiratet
12110  | armoldschwarzenegger | 27.12.2005 | stuttgart | verwitwet
12110  | michaeljackson       | 05.04.1955 | newyork   | verliebt
12110  | rudivoeller          | 11.11.2000 | bagdad    | geschieden
12110  | angelamerkel         | 01.01.1891 | potsdam   | offen für alles
12110  | oliverkahn           | 19.07.2006 | muenchen  | ledig
Sollte ein ander User eventuell gleiche Daten eingeben (BSP):

Code:
userid | name                 | gebdatum   | ort       | famstand
-----------------------------------------------------------------
18451  | ottowalkes           | 10.01.2000 | koeln     | ledig
18451  | sylversterstallone   | 15.06.1981 | berlin    | verheiratet
Dann erscheint das ganze in der DB so:

Code:
userid | name                 | gebdatum   | ort       | famstand
-----------------------------------------------------------------
12110  | ottowalkes           | 10.01.2000 | koeln     | ledig
12110  | sylversterstallone   | 15.06.1981 | berlin    | verheiratet
12110  | armoldschwarzenegger | 27.12.2005 | stuttgart | verwitwet
12110  | michaeljackson       | 05.04.1955 | newyork   | verliebt
12110  | rudivoeller          | 11.11.2000 | bagdad    | geschieden
12110  | angelamerkel         | 01.01.1891 | potsdam   | offen für alles
12110  | oliverkahn           | 19.07.2006 | muenchen  | ledig
18451  | ottowalkes           | 10.01.2000 | koeln     | ledig
18451  | sylversterstallone   | 15.06.1981 | berlin    | verheiratet
Hat jetzt aber User 12110 seine Daten aktuallisiert und füttert die DB erneut mit (BSP):

Code:
userid | name                 | gebdatum   | ort       | famstand
-----------------------------------------------------------------
12110  | ottowalkes           | 10.01.2000 | dortmund  | ledig (Umgezogen von Köln nach Dortmund)
12110  | rudivoeller          | 11.11.2000 | bagdad    | verliebt (Nicht mehr geschieden sondern verliebt)
Erscheint es in meiner DB so:

Code:
userid | name                 | gebdatum   | ort       | famstand
-----------------------------------------------------------------
12110  | ottowalkes           | 10.01.2000 | koeln     | ledig
12110  | sylversterstallone   | 15.06.1981 | berlin    | verheiratet
12110  | armoldschwarzenegger | 27.12.2005 | stuttgart | verwitwet
12110  | michaeljackson       | 05.04.1955 | newyork   | verliebt
12110  | rudivoeller          | 11.11.2000 | bagdad    | geschieden
12110  | angelamerkel         | 01.01.1891 | potsdam   | offen für alles
12110  | oliverkahn           | 19.07.2006 | muenchen  | ledig
18451  | ottowalkes           | 10.01.2000 | koeln     | ledig
18451  | sylversterstallone   | 15.06.1981 | berlin    | verheiratet
12110  | ottowalkes           | 10.01.2000 | dortmund  | ledig 
12110  | rudivoeller          | 11.11.2000 | bagdad    | verliebt
Doch ich hätte die beiden Zeilen gerne nur aktualisiert:

Code:
userid | name                 | gebdatum   | ort       | famstand
-----------------------------------------------------------------
12110  | ottowalkes           | 10.01.2000 | dortmund  | ledig
12110  | sylversterstallone   | 15.06.1981 | berlin    | verheiratet
12110  | armoldschwarzenegger | 27.12.2005 | stuttgart | verwitwet
12110  | michaeljackson       | 05.04.1955 | newyork   | verliebt
12110  | rudivoeller          | 11.11.2000 | bagdad    | verliebt
12110  | angelamerkel         | 01.01.1891 | potsdam   | offen für alles
12110  | oliverkahn           | 19.07.2006 | muenchen  | ledig
18451  | ottowalkes           | 10.01.2000 | koeln     | ledig
18451  | sylversterstallone   | 15.06.1981 | berlin    | verheiratet
Es müßte also vor jedem Eintrag überprüft werden, ob der Name bereits vorhanden ist.
Und wenn ja, dann soll diese Zeile nur aktualisiert werden.
D.h.: Jeder "name" kann bei jeder "userid" vorkommen, aber jedesmal nur ein mal.

Ich hoffe es ist jetzt verständlich...

PS:
Die Daten hab ich mal schnell erfunden, also keine Sorge.
Angela ist nicht so alt :-)
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Doppelte Einträge durch Query nivram MySQLi/PDO/(MySQL) 0 20.02.2005 16:43:27
Doppelte Einträge finden pixelterror MySQLi/PDO/(MySQL) 4 22.07.2004 22:08:10
array values auf doppelte einträge prüfen flobee PHP Grundlagen 5 10.06.2004 02:36:52
doppelte Einträge in MySQL unterbinden? mad-boy PHP für Fortgeschrittene und Experten 12 31.08.2002 12:51:53
doppelte einträge vermeiden EraTor PHP für Fortgeschrittene und Experten 1 01.04.2002 08:39:57


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:56:19 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt