nina: 1 bis 2 inserts in einem query

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

  1. 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

    1. 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

      1. 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

        --
        -------------------
        ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
        1. :( 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 ;)

          1. 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

            --
            Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
            (Victor Hugo)
            Veranstaltungsdatenbank Vdb 0.1