insert into if not exist

JesusFreak777

Erfahrenes Mitglied
Hallo,

ich möchte gerne zeilen in einer Tablle anlegen,... meine tabelle ist so aufgebaut

Code:
id   | ident   | time      | ...
---------------------------------
1    | A4T     | 237643    | ...
2    | E4s     | 237643    | ...
3    | 5D1     | 237643    | ...
6    | V1u     | 237643    | ...


//237643 steht für einen timestamp

die id ist auto_increment

jetzt möchte ich gerne neue ident´s hinzufügen,...

INSERT INTO ´meine tabelle´ SET ident=A7S, time=time(),...

jetzt möchte ich aber ein prüfung machen ob die ident schon existiert wenn ja einfach ignorieren,...

ich versuchte bereits

PHP:
INSERT IF NOT EXIST INTO ´meine tabelle' SET ident=E4s, time=time(),...

und

PHP:
INSERT IGNORE INTO ´meine tabelle' SET ident=E4s, time=time(),...

aber ich Vermute mal das diese immer die ID vergleichen und da diese automatisch hochzählt kommt es nie zum ignorieren,... was tun?
 
Was heisst einfach ignorieren? Der ganze INSERT wegschmeissen?

Die normalen gehen eigentlich immer auf den PrimaryKey

So auf die Schnelle und ungetestet, wenn du nicht auf den PrimaryKey testest
SQL:
INSERT INTO myTable
SELECT 
	newRow.3*
FROM
	(SELECT 1 AS id, 'A4T' AS ident, 237643 AS time) AS newRow
	RIGHT JOIN myTable
		ON newRow.ident = myTable.ident
WHERE
	myTable.id IS NULL

Achja, ich verschiebs mal zu den Datenbanken
 
Zuletzt bearbeitet von einem Moderator:
ja,...
ich mache folgendes,... ich lege eine-> ident (nummer) an und dann gehe ich auf bearbeiten,...
im bearbeiten kann ich dann die restlichen Felder ausfüllen,...
wenn jetzt aber schon diese eine ident (nummer) existiert, soll das anlegen übersprungen werden.
 
Hallo,

danke erstmal...

die eine hälfte funktioniert ja schon mal.

wenn ich was anlege was schon existiert,...

wenn ich aber was neues anlegen will legt er nichts an :/

hier mal mein Orginalcode,...
PHP:
$AUtoSQL = "
	INSERT INTO ".$autablename." 
SELECT 
    newRow.3*
FROM
    (SELECT '$au' AS au, '".time()."' AS time, '".time()."' AS modtime) AS newRow
    RIGHT JOIN myTable
        ON newRow.au = ".$autablename.".au
WHERE
    ".$autablename.".id IS NULL
	";
das mit der ID hab ich nicht ganz verstanden,... in diesen teil des Programmes verwende ich keine ID´s,... lasse diese nur automatisch anlegen,... woher stammt die 1?

--> au entspricht in diesen Fall jetzt ident (musste nicht programmtechnisch ein paar Änderungen vornehmen,...
--> die Spalte ID existiert zwar in der Tabelle, ist aber in diesen Fall ever unbekannt,...
 
item: du solltest myTable durch $autablename ersetzen
item: newRow.3* ist ein Schreibfehler meinerseits und heisst natürlich newRow.* , also ohne die 3
 
mag mich immer noch nicht,...

etwas mehr quählcode
PHP:
$AUtoSQL = "
	INSERT INTO ".$autablename." 
SELECT 
    newRow.*
FROM
    (SELECT '$au' AS au, '".time()."' AS time, '".time()."' AS modtime) AS newRow
    RIGHT JOIN ".$autablename."
        ON newRow.au = ".$autablename.".au
WHERE
    ".$autablename.".ID IS NULL
	";

$do_AUtoSQL = mysql_query($AUtoSQL);

das ich:
Code:
SELECT 1 AS id,
rausgelöscht habe stört nicht?
 
Wenn die Felder des SELECT nicht ganeu mit den Feldern der Tabelle übereinstimmen, dann musst du die Felder im INSERT angeben

SQL:
INSERT INTO {$autablename} (au, time, modtime)
SELECT
    newRow.*
FROM
    (SELECT '{$au}' AS au, '".time()."' AS time, '".time()."' AS modtime) AS newRow
    RIGHT JOIN {$autablename} AS tab
        ON newRow.au = tab.au
WHERE
    tab.id IS NULL

Ansonsten:
Da die diese Art von Fragen sehr oft kommt, habe ich mal ein Tutorial geschrieben wie man am besten auf Fehlersuche geht.
PHP MySQL Debug Queries
Geh es doch mal durch und falls du die Lösung nicht findest, poste mal das ausgegebe SQL-Statement ins Forum.
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

PHP:
$AUtoSQL = "
	INSERT INTO ".$autablename." SET 
	au='$au', 
	import='1', 
	time='".time()."', 
	modtime='".time()."'
	";

$AUtoSQL = "
INSERT INTO {$autablename} (au, time, modtime)
SELECT
    newRow.*
FROM
    (SELECT '{$au}' AS au, '".time()."' AS time, '".time()."' AS modtime) AS newRow
    RIGHT JOIN {$autablename} AS tab
        ON newRow.au = tab.au
WHERE
    tab.ID IS NULL
	";


if($do_AUtoSQL = mysql_query($AUtoSQL))
  {
  echo "OK";
  }
else
  {
  die(mysql_error()); 
  }

also mit der Fehlersuche bin ich nicht weitergekommen,... weil er (so tut er zumindest) alles richtig macht,...

der obere teil trägt stur ein der untere teil macht nix wenn´s schon eingetragen ist (wie er soll) und wenn noch nichts eingetragen ist trägt er auch nichts ein,...

meine ausgabe ist momentan ein funktionsfähiges phpmyadmin,...

hier meine tabelle (evtl. ist da ein fehler):
PHP:
CREATE TABLE IF NOT EXISTS `orderlist` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `import` varchar(250) DEFAULT NULL,
  `au` varchar(250) DEFAULT NULL,
  `kunde` varchar(250) DEFAULT NULL,
  `referenz` varchar(250) DEFAULT NULL,
  `cat` varchar(250) DEFAULT NULL,
  `termin` varchar(250) DEFAULT NULL,
  `erledigt` varchar(250) DEFAULT NULL,
  `info` varchar(250) DEFAULT NULL,
  `time` varchar(250) DEFAULT NULL,
  `modtime` varchar(250) DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=64 ;
 
Da die diese Art von Fragen sehr oft kommt, habe ich mal ein Tutorial geschrieben wie man am besten auf Fehlersuche geht.
PHP MySQL Debug Queries
Geh es doch mal durch und falls du die Lösung nicht findest, poste mal das ausgegebe SQL-Statement ins Forum.
 

Neue Beiträge

Zurück