Zum Inhalt springen

erweitertes INSERT Statement

Erstellt am 5. Juni 2013 · 3 Antworten · letzte Antwort am 10. Juni 2013

Tags: Frage

devzone ·

Ich muss eine bestimmte Zeile (uid) in der Tabelle (tt news) auswählen, daher benötige ich eine erweiterte INSERT INTO variante.

$userid_fe = 704;

$feUserRecord_ttnews = array (
 'tx_ctwextendnews_subscriber' => $userid_fe 
);

ALTE Anweisung ohne WHERE

$res_ttnews=$GLOBALS['TYPO3_DB']->exec_INSERTquery($ttnews_table, $feUserRecord_ttnews);

...da ich aber noch eine WHERE Bedingung benötige muss ich auf ein erweitertes INSERT Statement mit SELECT zurückgreifen (Link: INSERT-SELECT).

Leider bekomme ich das nicht ganz hin bzw. geht das überhaupt noch mit den Typo3 anweisungen?

NEUE Anweisung mit WHERE

$res_ttnews="INSERT INTO tt_news (tx_ctwextendnews_subscriber) SELECT uid, tx_ctwextendnews_subscriber, '704' FROM tt_news WHERE uid=101";

Die Zahlen (101,704) werden später wieder durch variablen ersetzt.

Unbekannter Benutzer ·

Wenn du ein INSERT SELECT machst müssen die Spalten übereinstimmen, d.h. Du sagt INSERT ... (tx_ctwextendnews_subscriber) dann darf dein SELECT auch nur eine Spalte (nämlich das was in tx_ctwextendnews_subscriber rein soll) zurückgeben... Mir ist noch nicht ganz klar, was du bezwecken willst sonst würde ich dir mit der Query helfen.

devzone ·
kitsunet schrieb

Wenn du ein INSERT SELECT machst müssen die Spalten übereinstimmen, d.h. Du sagt INSERT ... (tx_ctwextendnews_subscriber) dann darf dein SELECT auch nur eine Spalte (nämlich das was in tx_ctwextendnews_subscriber rein soll) zurückgeben... Mir ist noch nicht ganz klar, was du bezwecken willst sonst würde ich dir mit der Query helfen.

es ging um eine selektion von usern also eine komma sepperierte Liste von ids...ich habe mich aber nun aufgrund von user Meinungen und performance gründen umentschieden auf eine MM Tabelle. Eine insert select Anweißung erweißt sich nicht als effektiv.

Unbekannter Benutzer ·

Ah verstehe! Ja MM ist sicher besser, aber wenn Du sowas machen willst muss trotzdem die Spaltenzahl übereinstimnmen, d.h. dein SELECT muss dann einen kommaseparierten String zurück geben:

INSERT INTO tt_news (tx_ctwextendnews_subscriber) SELECT CONCAT_WS(',', uid, tx_ctwextendnews_subscriber, '704') FROM tt_news WHERE uid=101

Würde dann in die Spalte "tx_ctwextendnews_subscriber" den kommaseparierten String aus uid,tx_ctwextendnews_subscriber und 704 schreiben.