php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.05.2011, 12:13  
Neuer Benutzer
 
Registriert seit: 14.02.2010
Beiträge: 11
PHP-Kenntnisse:
Anfänger
Leberwurstbrot befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] INSERT ... ON DUPLICATE KEY UPDATE Problem

Hallo Leute,

hier sind ja schon einige Themen zu diesem Statement gegeben, nur leider nicht passend zu meinem Fall.

Ich habe folgende Tabelle in der unsere Pokerergebnisse gespeichert werden sollen.

id(primary key), name, points, position, date.

Die Daten der einzelnen Spieler werden in ein Formular eingegeben. Da es vorkommen kann, dass man einzelne Daten korrigieren muss, habe ich mich für "INSERT ... ON DUPLICATE KEY UPDATE" entschieden.

"Der Fehler"
Wenn ich schon vorhandene Daten verändere, klappt es. Wenn ich nun aber einen neuen Spieler hinzufüge, werden alle schon vorhandenen Daten nocheinmal gespeichert, und der neue Datensatz wird nicht gespeichert.

Kann es daran liegen, dass es für den neuen Datensatz noch keine id gibt? Wobei das eigentlich blödsinn ist, da die `id` auf AUTO_INCREMENT steht. Demnach müsste bei einem neuen Datensatz doch eine id generiert werden.

Hier der Code
PHP-Code:
$query "INSERT INTO #__pokertabelle 
                             (`id`, `name`, `points`, `position`, `day_of_match`) 
                             VALUES"
;
                             
        for( 
$i 0$n=count$data["name"] ); $i $n$i++)
        {
            
$query .= "(".(int)$data["id"][$i].",
                       "
.$db->Quote($data["name"][$i]).",
                       "
.(int)$data["points"][$i].",
                       "
.(int)$data["position"][$i].",
                       "
.$db->Quote($data["day_of_match"][$i]).")";
            if(
$i $n-1){
                
$query .= ",";
            }
        }
        
$query .= " ON DUPLICATE KEY UPDATE";
        
$query .= " `id`=VALUES(`id`),
                    `name`=VALUES(`name`),
                   `points`=VALUES(`points`),
                   `position`=VALUES(`position`),
                   `day_of_match`=VALUES(`day_of_match`)"
;
        
$query .= ";" 
und der Query

Code:
INSERT INTO #__pokertabelle (`id`, `name`, `points`, `position`, `day_of_match`)
VALUES(1, 'keno', 5, 2, '2011-05-10'),(72, 'pl1', 1, 4, '2011-05-10'),(71, 'pl2', 2, 3, '2011-05-10'),(70, 'pl3', 7, 1, '2011-05-10'),(76, 'pl4', 7, 1, '2011-05-10'),(75, 'pl5', 2, 1, '2011-05-10'),(73, 'pl6', 5, 2, '2011-05-10'),(74, 'pl7', 1, 0, '2011-05-10')

 ON DUPLICATE KEY UPDATE `id`=VALUES(`id`), `name`=VALUES(`name`), `points`=VALUES(`points`), `position`=VALUES(`position`), `day_of_match`=VALUES(`day_of_match`);
Über eine Hilfe würde ich mich sehr freuen.

leberwurstbrot
Leberwurstbrot ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 28.05.2011, 12:17  
Neuer Benutzer
 
Registriert seit: 14.02.2010
Beiträge: 11
PHP-Kenntnisse:
Anfänger
Leberwurstbrot befindet sich auf einem aufstrebenden Ast
Standard

Achso....

die Zeile unter ON DUPLICATE KEY UPDATE
Code:
 `id`=VALUES(`id`),
habe ich wieder entfernt.
Leberwurstbrot ist offline   Mit Zitat antworten
Alt 28.05.2011, 12:18  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von Leberwurstbrot Beitrag anzeigen
Wenn ich nun aber einen neuen Spieler hinzufüge, werden alle schon vorhandenen Daten nocheinmal gespeichert, und der neue Datensatz wird nicht gespeichert.
Kurze Frage: Hä?

Zitat:
Kann es daran liegen, dass es für den neuen Datensatz noch keine id gibt? Wobei das eigentlich blödsinn ist, da die `id` auf AUTO_INCREMENT steht. Demnach müsste bei einem neuen Datensatz doch eine id generiert werden.
Aber nur dann, wenn du keinen Wert für id übergibst, oder NULL oder 0.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 28.05.2011, 12:36  
Neuer Benutzer
 
Registriert seit: 14.02.2010
Beiträge: 11
PHP-Kenntnisse:
Anfänger
Leberwurstbrot befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von ChrisB Beitrag anzeigen
Kurze Frage: Hä?

Zu deiner Frage:

Es gibt einen "ViewSpieltag". Wenn ich mir selbigen ausgeben lasse, werden dort (wenn schon vorhanden) die Ergebnisse des Spieltages für jeden Spieler angezeigt.
In diesem View kann ich nun neue Datensätze speichern, oder vorhandene ändern.
Ich hoffe das erklärt es!

Zitat:
Zitat von ChrisB Beitrag anzeigen
Aber nur dann, wenn du keinen Wert für id übergibst, oder NULL oder 0.
Also ich lasse mich immer gerne belehren, aber laut http://dev.mysql.com/doc/refman/5.1/...increment.html wird eine id generiert.
Leberwurstbrot ist offline   Mit Zitat antworten
Alt 28.05.2011, 12:37  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von Leberwurstbrot Beitrag anzeigen
Zu deiner Frage:
Die bezog sich explizit auf das, was ich zitiert hatte.

Zitat:
Also ich lasse mich immer gerne belehren, aber laut http://dev.mysql.com/doc/refman/5.1/...increment.html wird eine id generiert.
Ja - unter den genannten Bedingungen.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 28.05.2011, 12:49  
Neuer Benutzer
 
Registriert seit: 14.02.2010
Beiträge: 11
PHP-Kenntnisse:
Anfänger
Leberwurstbrot befindet sich auf einem aufstrebenden Ast
Standard

Ok ich versuche es nochmal.

Ein FormElement. Dort wird ein Spieltag angezeigt.
In diesem FormElement kann ich sowohl vorhandene Einträge ändern, als auch neue hinzufügen.( onclick javascriptfunktion erstellt neue zeile mit Inputfeldern).

Diese Daten werden nun zusammen per POST weitergeleitet und in den Query aus meinem ersten Beitrag eingefügt.

Nun kann es also sein, dass in diesem POST neue Datensätze sind, sowie bestehende, die verändert worden sind.
Leberwurstbrot ist offline   Mit Zitat antworten
Alt 28.05.2011, 13:31  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Und wie äußert sich jetzt das Problem ...?

Wie sieht die Query für einen neuen Spieler aus, was bewirkt sie in phpMyAdmin getestet?
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 28.05.2011, 13:36  
hts
Erfahrener Benutzer
 
Registriert seit: 07.09.2010
Beiträge: 722
PHP-Kenntnisse:
Fortgeschritten
hts befindet sich auf einem aufstrebenden Ast
Standard

Schreibe einfach in ein Hiddenfield die ID rein. Wenn ID vorhanden UPDATE, ansonsten INSERT.

Ansonsten, nach deiner Variante müsstest du den Spielernamen und Tag UNIQUE setzen, damit ON DUPLICATE KEY UPDATE greift.
hts ist offline   Mit Zitat antworten
Alt 28.05.2011, 13:46  
Neuer Benutzer
 
Registriert seit: 14.02.2010
Beiträge: 11
PHP-Kenntnisse:
Anfänger
Leberwurstbrot befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von ChrisB Beitrag anzeigen
Und wie äußert sich jetzt das Problem ...?

Wie sieht die Query für einen neuen Spieler aus, was bewirkt sie in phpMyAdmin getestet?
Ok.

Wenn ich folgende Query in phpMyAdmin eingebe geht es.

PHP-Code:
INSERT INTO #__pokertabelle (`id`, `name`, `points`, `position`, `day_of_match`)
VALUES(1'keno'52'2011-05-10'),(72'pl1'14'2011-05-10'),(71'pl2'23'2011-05-10'),(70'pl3'71'2011-05-10'),(76'pl4'71'2011-05-10'),(75'pl5'21'2011-05-10'),(73'pl6'52'2011-05-10'),('''pl7'10'2011-05-10')

 
ON DUPLICATE KEY UPDATE `id`=VALUES(`id`), `name`=VALUES(`name`), `points`=VALUES(`points`), `position`=VALUES(`position`), `day_of_match`=VALUES(`day_of_match`); 
Dann habe ich auf jeden fall einen Anhaltspunkt.
Leberwurstbrot ist offline   Mit Zitat antworten
Alt 29.05.2011, 12:33  
Neuer Benutzer
 
Registriert seit: 14.02.2010
Beiträge: 11
PHP-Kenntnisse:
Anfänger
Leberwurstbrot befindet sich auf einem aufstrebenden Ast
Standard

Ich habe es lösen können. Das Problem lag darin, dass in dem Javascript welches eine neue Tabellenzeile generiert Variablen falsch benannt waren.

Sorry nächstes mal guck ich genauer.

leberwurstbrot
Leberwurstbrot ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] mehrfaches INSERT über PHP drzwockel PHP Tipps 2010 10 10.08.2010 11:03
PHP Update und Insert - Fehler! PHP-Chris PHP Tipps 2010 3 13.07.2010 19:36
[Erledigt] insert ... ON DUPLICATE KEY UPDATE Paul.Schramenko Datenbanken 1 26.05.2010 15:25
Problem mit Mysql Left Join Ambfrage pro-tech Datenbanken 11 22.05.2010 10:59
MySQL: INSERT INTO oder UPDATE verknüpft in einem Query juice122 Datenbanken 21 06.05.2010 20:25
[Erledigt] Update Insert von Tabellen frank1973 Datenbanken 14 11.04.2010 18:49
Race Condition Problem (INSERT -> SELECT) R4v3r Datenbanken 5 11.08.2009 12:58
[Erledigt] Insert / Update Problem bei Apostroph fulltilt PHP Tipps 2009 4 25.06.2009 13:49
[Erledigt] Problem beim Mysql UPDATE mastertnt PHP Tipps 2009 4 14.02.2009 17:26
Abfrage was er gemacht hat INSERT ... ON DUPLICATE KEY Oetzi Datenbanken 16 16.07.2008 18:36
Duplicate entry problem phrain PHP Tipps 2008 8 08.04.2008 14:37
Pathfinding Algorithmus optimieren? (Algorith. von Dijkstra) Martin13 PHP Tipps 2007 19 04.09.2007 19:20
PHP-Fehlermeldung, weiss nicht mehr weiter PHP Tipps 2005-2 12 21.09.2005 12:56
[Erledigt] fehler den ich noch nie gesehen habe Datenbanken 7 09.06.2005 14:29
HILFE: Column count doesn't match value count at row 1 Datenbanken 17 12.06.2004 16:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
on duplicate key update, mysql on duplicate key update, on duplicate key, insert on duplicate key update, on duplicate key update mehrere, on duplicate key update where, on duplicate key update id, insert ... on duplicate key update, on duplicate key where, on duplicate key update mit variablen php, mysql insert on duplicate left join, php insert update, mysql on insert update problem, mysql insert update funktioniert nicht, \on duplicate key update\, on duplicate key update id=id 1, mysql on duplicate key does not work, insert select on duplicate key update, on duplicate key update bestehende id abfragen, on duplicate key update funktioniert nicht

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:42 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum