AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken [MySQL] Einfügen wenn nicht vorhanden, sonst überschreiben
Thema durchsuchen
Ansicht
Themen-Optionen

[MySQL] Einfügen wenn nicht vorhanden, sonst überschreiben

Ein Thema von 3_of_8 · begonnen am 7. Jun 2006 · letzter Beitrag vom 7. Jun 2006
Antwort Antwort
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#1

[MySQL] Einfügen wenn nicht vorhanden, sonst überschreiben

  Alt 7. Jun 2006, 15:01
Datenbank: MySQL • Zugriff über: PHP
Morgen.

Ich weiß grad ned so recht, wie ich das machen soll.

Ich will eine Zeile in eine Tabelle einfügen wenn sie noch nicht vorhanden ist, ansonsten soll die Zeile überschrieben werden.

Einzeln sähe das so aus:

Wenn nicht vorhanden, dann:

INSERT INTO tabellenname VALUES (NULL, 'wert1', 'wert2')

Wenn vorhanden, dann:

UPDATE tabellenname SET wert1='wert1', wert2='wert2'

Wie kann ich das am einfachsten hinkriegen?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: [MySQL] Einfügen wenn nicht vorhanden, sonst überschreib

  Alt 7. Jun 2006, 15:03
Moin,

umgekehrt: Update ausfuehren, mit mysql_affected_rows testen, ob eine Zeile veraendert wurde, wenn nicht dann eben insert machen

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: [MySQL] Einfügen wenn nicht vorhanden, sonst überschreib

  Alt 7. Jun 2006, 15:23
oder du baust Dir eine StoredProcedure.
Dies setzt allerdings eine sehr neue Version des MySQL vorraus.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: [MySQL] Einfügen wenn nicht vorhanden, sonst überschreib

  Alt 7. Jun 2006, 16:15
Hat MySQL denn nicht die erweiterte Syntax
REPLACE INTO tabelle (...) VALUES(...) http://dev.mysql.com/doc/refman/5.1/en/replace.html

PS: Schade, dass das kein SQL Standard ist, obwohl es ein wirklich sinnvolles Feature ist.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Amargosa
Amargosa

Registriert seit: 17. Mai 2006
Ort: Offenbach
21 Beiträge
 
#5

Re: [MySQL] Einfügen wenn nicht vorhanden, sonst überschreib

  Alt 7. Jun 2006, 16:40
Hi

Ich mache immer einen INSERT. Sollte der Fehlschlagen mache ich ein UPDATE. Klappt auch der nicht breche ich ab mit einer Fehlermeldung (lasse mir den letzten Fehler von mysql_errno() geben).
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: [MySQL] Einfügen wenn nicht vorhanden, sonst überschreib

  Alt 7. Jun 2006, 18:26
Naja, habs jetzt anders gemacht:

Code:
if (mysql_fetch_row(mysql_query("SELECT varid FROM vars WHERE varname=$varname"))) {
  mysql_query("UPDATE usw.");
} else {
  mysql_query("INSERT INTO usw.");
}
Aber ich glaube, ich schreibs um auf Alcaeus' Code.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: [MySQL] Einfügen wenn nicht vorhanden, sonst überschreib

  Alt 7. Jun 2006, 19:21
Problem: mysql_affected_rows scheint 0 zurückzugeben, wenn der Wert nicht geändert wird.

Wenn ich also value='0' im UPDATE drinstehen hab, aber value schon 0 ist, wird 0 zurückgegeben und mein Script inserted die Zeile trotzdem.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#8

Re: [MySQL] Einfügen wenn nicht vorhanden, sonst überschreib

  Alt 7. Jun 2006, 19:25
Zitat von 3_of_8:
Problem: mysql_affected_rows scheint 0 zurückzugeben, wenn der Wert nicht geändert wird.

Wenn ich also value='0' im UPDATE drinstehen hab, aber value schon 0 ist, wird 0 zurückgegeben und mein Script inserted die Zeile trotzdem.
o.O Wie sieht denn dein Query aus? Ich hatte noch nie einen Fall, wo mySQL sowas gemacht hat, was fuer ne Version hast du am Laufen?

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: [MySQL] Einfügen wenn nicht vorhanden, sonst überschreib

  Alt 7. Jun 2006, 19:29
MySQL 4.1.14 läuft bei mir.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Amargosa
Amargosa

Registriert seit: 17. Mai 2006
Ort: Offenbach
21 Beiträge
 
#10

Re: [MySQL] Einfügen wenn nicht vorhanden, sonst überschreib

  Alt 7. Jun 2006, 20:33
Das ist jetzt ein Beispiel wie ich es manchmal mache: Insert -> Update -> Error

Code:
#->Query DB, no result
function mysqlqueryonly($squery, $bReturn = FALSE)
{
  if(!mysql_query($squery))
  {
    if($bReturn == FALSE)
    {
      $sError = "f_mysqlqueryonly - Failed query! - Errorno.:".mysql_errno()." Error:".mysql_error();
      mysql_close();
      error_log($sError, 0);
      die($sError);      
    }
    else
    {
      return FALSE;
    }
  } 
  return TRUE;  
}
#<-Query DB, no result

$squery = "INSERT
    INTO users_game(Games_ID, Region_Code, Date, Users)
    VALUES ($sGameID, 'P', '$sDate', $pvalue)";

  if(!mysqlqueryonly($squery, TRUE))
  {
    $squery = "UPDATE users_game
      SET Users = $pvalue
      WHERE Games_ID = $sGameID AND
        Region_Code = 'P' AND
        Date = '$sDate'";
    mysqlqueryonly($squery);      
  }
[edit=alcaeus]delphi- durch code-Tags ersetzt. Mfg, alcaeus[/edit]
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:37 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