1 bis 2 inserts in einem query
nina
- datenbank
hi,
hab vor bei meinem import script, was zum einen daten einer tab2.kategorie (in verbindung mit einer tab2.kategorie-id) in tab1 (=>tab1.daten, tab1.kategorie-id, ...) speichern soll und wenn eine (tab2.)kategorie noch nicht exististiert, so soll noch schnell ein neuer datensatz in tab2 angelegt werden.
(wie) geht sowas?
INSERT INTO tab1 (daten,kategorie_id)SET("$daten",(SELECT kategorie_id FROM tab2 WHERE kategorie="$kategorie" LIMIT 0,1 [->TODO<-]))
nun wüsste ich eben gern, was ich statt [->TODO<-] schreiben könnte, sodass, wenn kein übereinstimmender eintrag in tab2 existiert, ein neuer erstellt wird und zwar ohne einen zusätzlichen schritt.
wäre echt super, wenn das ginge.
danke schonmal
Hallo Nina,
hab vor bei meinem import script, was zum einen daten einer tab2.kategorie (in verbindung mit einer tab2.kategorie-id) in tab1 (=>tab1.daten, tab1.kategorie-id, ...) speichern soll und wenn eine (tab2.)kategorie noch nicht exististiert, so soll noch schnell ein neuer datensatz in tab2 angelegt werden.
leider hast Du vergessen uns mitzuteilen, welches Datenbankmanagementsystem (DBMS) in welcher Version Du verwendest. Ich vermute (Phantasie durch die Verwendung von LIMIT angeregt), Du verwendest MySQL, mindestens 4.1.x (da Subselect).
Bei Datenbankfragen ist es immer eine gute Idee, das verwendete DBMS zu nennen, bei MySQL sind vernünftige Tipps in vielen Fällen erst möglich, wenn man zusätzlich die Version angibt, da der Leistungsumfang sich bei MySQL von Version zu Version enorm unterscheidet.
(wie) geht sowas?
Mit einem Statement, in MySQL: gar nicht, wie Dir das Handbuch im Abschnitt INSERT ... SELECT-Syntax verrät:
<zitat>
Currently, you cannot insert into a table and
select from the same table in a subquery.
</zitat>
wäre echt super, wenn das ginge.
MySQL 5.x vorausgesetzt, solltest Du Dein Problem z.B. mit einer Stored Procedure lösen können.
Freundliche Grüße
Vinzenz
hab mysql und leider nur die letzte 4er version und nicht 5.
<zitat>
Currently, you cannot insert into a table and
select from the same table in a subquery.
</zitat>
da steht dass es nicht einzufügen geht wenn man gleichzeitig in der selben tabelle einen subquery hat. aber ich will ja erstmal prüfen, ob es einen passenden eintrag gibt, dann ist alles ok; wenn nicht brauch ich irgendwie ne rückmeldung vom query, dass ich das dann eben doch in einem zusätzlichen schritt machen kann.
wie geht das?
nun aber bitte nicht einen 3. query, der jedes mal prüfen muss, ob es einen eintrag gibt; zumindest das hoffe ich, dass "in einem" funktioniert...
?
danke
Hi,
nun aber bitte nicht einen 3. query, der jedes mal prüfen muss, ob es einen eintrag gibt; zumindest das hoffe ich, dass "in einem" funktioniert...
vielleicht fällt noch jemandem was besseres ein, aber das wäre aus meiner Sicht eine Anwendung für Trigger, auch hier wieder abhängig von der MySQL-Version, die 5.1er kann's.
MfG
Rouven
:( hab da leider nur die 4er auf dem einsatzserver...
gibt es keine konventionelle methode, die rückmeldung gibt, ob vorhanden oder nicht in der verschachtelung?
obwohl, andere idee: ich könnte ja festlegen, dass er nur nen DS erstellt, wenn !="" => wenn kein datensatz betroffen ist, kann ich das abfragen in php, mal nachlesen ;)
Hallo
gibt es keine konventionelle methode, die rückmeldung gibt, ob vorhanden oder nicht in der verschachtelung?
obwohl, andere idee: ich könnte ja festlegen, dass er nur nen DS erstellt, wenn !="" => wenn kein datensatz betroffen ist, kann ich das abfragen in php, mal nachlesen ;)
Du kannst die DB fragen, ob es die Kategorie schon gibt. Mit mysql_num_rows() kannst du die Anzahl der Datensätze im Ergebnis ermittlen (funktioniert wie count() bei Arrays). Ergebnis sollte 1 oder 0 sein.
bei 0: Kategorie anlegen
bei 1: selbige benutzen
Tschö, Auge