Stephan: INSERT in IF, geht das?

Hallo Selfhtml,
Um zu verhindern, das doppelte Datensätze in eine Tabelle geschrieben werden, würde ich gerne das Testen und eventuelle Schreiben der Daten mittels SQL machen. Das sieht dann erstmal so aus:

SELECT
IF((SELECT np_id FROM notepad_cb WHERE i_id=5) >0,
    'exists',
    INSERT INTO notepad_cb( np_rubric, np_text, u_id, i_id )
    VALUES (SELECT i_rubric
    FROM images_cb
    WHERE i_id =5, '', 2, 5)
)

phpmyadmin findet aber ab 'INTO' einen Fehler.
Geht es überhaupt, das man in einem IF als alternativ Wert ein INSERT angibt?

Thnx for help,
Stephan

  1. Hallo Stephan,

    Um zu verhindern, das doppelte Datensätze in eine Tabelle geschrieben werden, würde ich gerne das Testen und eventuelle Schreiben der Daten mittels SQL machen. Das sieht dann erstmal so aus:

    Warum so kompliziert?

    SELECT
    IF((SELECT np_id FROM notepad_cb WHERE i_id=5) >0,
        'exists',
        INSERT INTO notepad_cb( np_rubric, np_text, u_id, i_id )

    Offensichtlich darf i_id nur ein einziges mal vorkommen. Richtig?
    Also sollte diese Spalte mit einem eindeutigen Index versehen sein.

    Ist die i_id nicht vergeben, dann ist die Einfügeoperation erfolgreich, ist sie jedoch bereits vergeben, schlägt das INSERT fehl mit der Rückmeldung einer Indexverletzung. Diesen Fehler kannst Du in Deiner Anwendung entsprechend behandeln.

    Geht es überhaupt, das man in einem IF als alternativ Wert ein INSERT angibt?

    Nein. Du könntest allerdings eine Stored Procedure schreiben, MySQL 5.x vorausgesetzt.

    Freundliche Grüße

    Vinzenz