Archivlink: javarea.de Forum > PHP, MySQL & CGI > Tabelle auslesen und Unique verwenden
Vollständigen Link anzeigen: javarea.de Forum > PHP, MySQL & CGI > Tabelle auslesen und Unique verwenden
Pages: [1]
| geschrieben von rich am 14.03.2010 - 11:11 |
hallo,
ich habe eine Tabelle namens games_merkliste mit folgenden Feldern...
merkliste_id
merkliste_spielid
merkliste_username
merkliste_spielname
merkliste_gamelogo
merkliste_angenommen
merkliste_abgelehnt
merkliste_offen
merkliste_zeit
d.h. jeder user kann sich ein o. mehrere Spiele merken lassen was dann auch
seperat angezeigt werden... soweit alles schön und gut.
allerdings kann ein und der selbe User sich das Spiel auch 10x in die Merkliste eintragen lassen.
ich hab im Netz schon geschaut und das kann man mit Unique im Mysql unterbinden.
dies hab ich auch gemacht mit merkliste_spielid und merkliste_username leider kann man nur
eines davon auswählen.
soweit hat das auch funktioniert, ich konnte das Game nur noch einmal in die DB eintragen...
hatte mich schon gefreut , dass es funktioniert hat....aaaaber nun konnten die anderen user das Games nicht mehr einfügen ^^
ihr versteht das Problem !?
wie kann ich Mysql sagen, dass es merkliste_spielid & merkliste_username prüfen soll?
zb. Spielid=12 , Userid=3 hat das Spiel schon eingetragen kann also das gleiche nicht noch mal einfügen. |
| geschrieben von Micha am 14.03.2010 - 13:35 |
Hi,
Du könntest vor dem Hinzufügen einfach eine Abfrage machen:
| HTML-Quelltext | 1:
| SELECT * WHERE Spielid=12 AND Userid=3 |
Wenn Du etwas anderes als NULL zurück bekommst, ist das Spiel bereits eingetragen ansonsten noch nicht und kann ergänzt werden.
Gruß Micha |
| geschrieben von rich am 16.03.2010 - 10:10 |
hey Micha...
ich hab das mal so versucht aber das hat nicht funktioniert
| PHP-Quelltext | 1:
2:
3:
4:
5:
6:
7:
|
<?
$sql="INSERT INTO ".$prefix."merkliste(merkliste_spielid, merkliste_username, merkliste_spielname, merkliste_gamelogo, merkliste_offen, merkliste_zeit)VALUES('$merkliste_spielid', '$merkliste_username', '$merkliste_spielname', '$merkliste_gamelogo', '$merkliste_offen', '".time()."')";
$result=mysql_query($sql);
if(mysql_errno()==1062) echo "Datensatz bereits vorhanden";
elseif(!mysql_errno()) echo "Fehler in MySQL : ".mysql_error();
?>
|
lg |
| geschrieben von Micha am 17.03.2010 - 12:13 |
Hallo,
man lässt ein Kind nicht auf die heiße Herdplatte fassen, nur damit es weiß, das es sich verbrennt. Übertragen auf Dein Problem: Man lässt eine Abfrage nicht einfach in einen Fehler laufen und versucht dann zu reagieren. Frage also lieber vorher einmal ab, ob es schon was gibt und führe dann ggf. Dein INSERT durch.
Gruß Micha |
| geschrieben von Danny am 17.03.2010 - 12:32 |
Hallo ihr beiden ;)
Ich würde wie Michael vorgeschlagen hat erst überprüfen ob es einen solchen Eintrag schon gibt, wenn nicht soll er es eintragen. Die Programmlogik sollte dein Script beherbergen (Das muss man natürlich nicht machen, gewisse Logik kann man auch in der Datenbank unterbringen aber das geht hier zuweit ;) ).
Nichts desto trotz würde ich zusätzlich der Tabelle einen UNIQUE Schlüssel hinzufügen, schließlich darf es solche Konstelationen in deiner Seite nicht geben (egal wie auch immer sie da rein kommen könnten)
Dein Fehler ist, du hast wahrscheinlich 2 Unique Keys erstellt. Die gelten unabhängig voneinander, also es dürfen nicht 2 Einträge die selbe merkliste_spielid UND es dürfen nicht 2 Einträge den selbe merkliste_username haben.
Du musst einen UNIQUE Schlüssel erstellen über beide Felder. In phpMyAdmin siehst du in der Tabellenstruktur Seite unten Indizes. Dort kannst du "Index über 2 Spalten anlegen" und als Indextyp UNIQUE und beide Spalten auswählen.
oder mit SQL
| HTML-Quelltext | 1:
| ALTER TABLE `games_merkliste` ADD UNIQUE `u_spielid_username` ( `merkliste_spielid` , `merkliste_username` ) |
Damit hast du folgende Regel: Es dürfen nicht 2 Einträge die selbe merkliste_spielid und merkliste_username Konstellation haben.
Gruß Danny |
| geschrieben von rich am 22.03.2010 - 17:21 |
| okay danke ich werd das mal in angriff nehmen =) |
|