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