PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : vor insert testen ob element schon vorhanden ist



supersucker
28.02.2006, 20:02
abend zusammen,

wenn ich bisher vor einem insert testen wollte ob das entsprechende element schon in der datenbank vorhanden ist, hab ich vorher ein select gemacht und dann geschaut ob das resultset größer 0 ist, also in pseudocode:



select * from table where name = "xxx";
if (resultset == 0) {
insert into ......
}


meine frage nun:

gibt es dafür clientseitig eine bessere möglichkeit? irgendwie kommt mir das reichlich plump vor....

serverseitig kann ich ja sowas machen wie


if not exists (select .....) insert into....


aber clientseitig?

danke für alle tips!

lordlamer
28.02.2006, 20:27
hi

bei mysql gibts nen "insert ignore" - einfach mal tolle dumps machen in phpmyadmin.

da werden dann vorhanden/gleiche zeilen nicht nochmal reingehauen.

mfg frank

ninguno
01.03.2006, 08:19
was willst du denn machen wenn der key schon vorhanden ist? das insert dann bleiben lassen oder die entsprechende row updaten? falls letzteres dann kannst du den insert modifier ON DUPLICATE KEY UPDATE verwenden

supersucker
01.03.2006, 10:08
ja, es geht darum das insert dann bleiben zu lassen.

die sache ist die:

es sind drei aktionen, ob ich das nun mit jdbc, mysql/php oder sonst was mache:

- ein select auf das entsprechende element
- das testen des resultsets
- das einfügen des elements wenn es noch nicht vorhanden ist

ich dachte nun das es für so eine oft vorkommende problemstellung bestimmt eine möglichkeit gibt, das "in einem rutsch" zu machen.

google und seine freunde haben mich mittlerweile allerdings fast davon überzeugt, das es halt nicht anders geht....

oder hat noch jemand eine idee?

ninguno
01.03.2006, 12:23
und was spricht dagegen das insert einfach zu machen. wenn das insert klappt ist's okay und wenn der key schon vorhanden ist dann kommt halt ein fehler zurück. den kann man ja dann ignorieren.

supersucker
01.03.2006, 13:07
und was spricht dagegen das insert einfach zu machen.

nichts!

hätte es nur wesentlich ästhetistischer gefunden, wenn man sowas in einer query machen könnte, und nicht versucht was einzutragen und dann den fehler behandelt bzw. ignoriert.

werd mich damit wohl abfinden müssen.....:-)

babsi
14.03.2006, 13:29
Erstell ne Procedure , das ist doch eine elegante Lösung.

brahma
14.03.2006, 13:36
OK, hier ein Auschnitt aus meinem SQL-Backup von gestern:


INSERT DELAYED IGNORE INTO `book_ban` (`ban_ip`) VALUES ('123.123.123.123');


Damit sollten keine Duplikate auftreten.