php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.12.2010, 00:09  
Gesperrt
 
Registriert seit: 03.12.2010
Beiträge: 860
PHP-Kenntnisse:
Anfänger
coola wird schon bald berühmt werden
Standard insert if not exists

hi!

kann man so was
Code:
select * from tabelle where name="a";
nur wenn nichts gefunden wird:
insert into tabelle set name="a";
irgendwie zu 1 sql-Befehl zusammenfassen?

vielleicht irgendwie in so einem Stil
Code:
insert into tabelle set name="a" if not exists name="a";
thanks im voraus
coola ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 03.12.2010, 00:19  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.266
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

INSERT IGNORE oder REPLACE
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 03.12.2010, 00:23  
Gesperrt
 
Registriert seit: 03.12.2010
Beiträge: 860
PHP-Kenntnisse:
Anfänger
coola wird schon bald berühmt werden
Standard

also meine Tabelle schaut so aus:
id: autoincrement primary key
name: varchar(50)

die 2 Befehle schauen doch auf den key, oder?
würde das dann bei mir trotzdem irgendwie funktionieren?
coola ist offline   Mit Zitat antworten
Alt 03.12.2010, 00:27  
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 coola Beitrag anzeigen
die 2 Befehle schauen doch auf den key, oder?
Nicht den, sondern einen.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 03.12.2010, 00:34  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.266
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

INSERT IGNORE prueft, ob der INSERT einen Duplicate Key Fehler erzeugen wuerde. Falls dem so ist, wird kein INSERT durchgefuehrt. Sprich du garantierst damit die Existenz des Eintrags, kannst ihn aber nicht mehr aktualisieren (also z.B. name aendern). Das kannst du nur mit REPLACE oder INSERT ON DUPLICATE KEY UPDATE.

Was du willst ist mir unklar, aber ehrlich gesagt auch etwas egal da du ja deinen Fall im Handbuch herauslesen kannst:
http://dev.mysql.com/doc/refman/5.1/de/insert.html
http://dev.mysql.com/doc/refman/5.1/...duplicate.html
http://dev.mysql.com/doc/refman/5.1/de/replace.html

Waere schoen, wenn du bei Fragen zu existierenden built-in Funktionalitaeten grundsaetzlich erst einmal ins Handbuch schaust.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 03.12.2010, 00:42  
Gesperrt
 
Registriert seit: 03.12.2010
Beiträge: 860
PHP-Kenntnisse:
Anfänger
coola wird schon bald berühmt werden
Standard

aber in allen Fällen müsste name irgendwie als einzigartig markiert sein, richtig?
also entweder unique oder oder primary key, stimmts?

leider kann ich das auf die Spalte name nicht machen.
coola ist offline   Mit Zitat antworten
Alt 03.12.2010, 08:31  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Ich denke er meint sowas abenteuerliches wie dies hier:

INSERT INTO xxx (name) SELECT 'a' FROM xxx WHERE name = 'a' GROUP BY name HAVING COUNT(id) = 0
cycap ist offline   Mit Zitat antworten
Alt 03.12.2010, 10:01  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.266
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von coola Beitrag anzeigen
aber in allen Fällen müsste name irgendwie als einzigartig markiert sein, richtig?
also entweder unique oder oder primary key, stimmts?

leider kann ich das auf die Spalte name nicht machen.
Ja, die Datenbank kann nicht hellsehen, es muss schon eine eindeutige Kennzeichnung her, ob dieser Eintrag nun eingefügt oder aktualisiert werden soll. Das übernimmt eben die DUPLICATE-Prüfung anhand der UNIQUE oder PK Spalten.

Es ist kein Beinbruch ein SELECT auszuführen und hinterher ein INSERT oder UPDATE falls nötig. Du wirst in Sachen Geschwindigkeit keinen Nachteil spüren und verständlich ist es oben drauf auch noch.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 03.12.2010, 11:12  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Wäre cool wenn das gehen würde, dann lässt man die WHERE-Clause weg und die DB fügt jeweils einen Datensatz für jede mögliche Zeichenkombination eines VARCHAR(100) Felds ein... das wird ein Spaß
cycap ist offline   Mit Zitat antworten
Alt 03.12.2010, 11:34  
Gesperrt
 
Registriert seit: 03.12.2010
Beiträge: 860
PHP-Kenntnisse:
Anfänger
coola wird schon bald berühmt werden
Standard

Zitat:
Es ist kein Beinbruch ein SELECT auszuführen und hinterher ein INSERT oder UPDATE falls nötig. Du wirst in Sachen Geschwindigkeit keinen Nachteil spüren und verständlich ist es oben drauf auch noch.
oohhhjaaa!!! schon! weil zwischen INSERT und UPDATE dann ja sonst nichts passieren darf und ich dann die Tabelle sperren muss. das geht voll auf die Performance.

Aber ich habe mich jetzt mit meinem Kollegen unterhalten. Vielleicht kann die Spalte doch unique sein. Er muss beim Auftraggeber nachfragen.

Wie würde denn dann so ein Befehl ausschauen? Dann muss ich die Spalte name auf unique setzen, oder?

EDIT:
ich verstehe den Befehl nicht:
INSERT INTO xxx (name) SELECT 'a' FROM xxx WHERE name = 'a' GROUP BY name HAVING COUNT(id) = 0
kannst du mir den bitte erklären?

Geändert von coola (03.12.2010 um 12:15 Uhr).
coola 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
Insert if exists update nimmme01 Datenbanken 4 18.06.2010 21:43
Problem mit Mysql Left Join Ambfrage pro-tech Datenbanken 11 22.05.2010 10:59
[Erledigt] Abfrage Ergebins in INSERT weiterverwenden kalppt nicht seinereiner Datenbanken 6 22.01.2009 23:31
Self Join / Nested Join ? Ich hab ne Blockade... iangillan Datenbanken 11 06.01.2008 21:37
Pathfinding Algorithmus optimieren? (Algorith. von Dijkstra) Martin13 PHP Tipps 2007 19 04.09.2007 19:20
Verständnisprobleme bei Utf8 > Character Set > Collate erna Datenbanken 4 20.03.2007 14:08
Differenz zwischen 2 Zahlen duderino PHP Tipps 2006 19 10.08.2006 22:12
PRoblem mit Cookie bei PHPbb-Board PHP Tipps 2007 8 12.12.2005 20:56
mysql dump einspielen (ohne phpmyadmin) PHP Tipps 2005-2 6 18.06.2005 21:50
[Erledigt] fehler den ich noch nie gesehen habe Datenbanken 7 09.06.2005 14:29
dynamisches MENÜ aus db lesen.probleme mit SUBid !! PHP Tipps 2005 26 24.03.2005 18:53
dem verzweifeln nahe PHP Tipps 2004 26 24.10.2004 17:28
Zeile einfach überspringen bei Unique-Verletzung tapferesschneiderlein Datenbanken 6 03.09.2004 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
insert into if not exists, mysql insert if not exists, insert if not exists, mysql insert if, insert into if not exist, mysql update insert if not exists, insert if not exist, sql insert if not exists, mysql if not exists insert, sql insert into if not exists, insert where not exists mysql 5.1, instert into if not exists, mysql insert ifnotexist, insert if not exist php mysql, php insert if not exists, insert into where not exists, php exists, insert into if not exists mysql, mysql update if not exists insert, php insert if not exist

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:04 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