2017-06-02 2 views
1

Ich versuche, das Ergebnis einer Tabelle zu erhalten und in eine andere Tabelle einzufügen. Die Ergebnisse sind Benutzer-IDs. Dieser Code sollte funktionieren, tut es aber nicht.Einfügen des Ergebnisses einer Tabelle in eine andere Tabelle mit zwei Foreach-Schleifen

$query1 = "SELECT id FROM users";       
$select1 = $db->prepare($query1); 
$select1->execute(array()); 
foreach($select as $index => $rs) { 

    $users = $rs['id']; 

    // the results are 1,2,3,4,5,6,7,8... (the user id's) 

} 



// Here below, I want to add the results into another table... 

foreach ($users as $row){ 
    $query2 = "INSERT INTO validateuser (userid) VALUES (".$row.")"; 

    $select2 = $db->prepare($query2); 
    $select2->execute(array()); 
} 

Antwort

2

Das scheint mir zu kompliziert. Warum lassen Sie nicht zu, dass die Datenbank die am besten geeigneten Datenbanken verwendet - verarbeiten Sie Daten und führen Sie dies in einer einzigen INSERT-SELECT-Anweisung aus?

INSERT INTO validateuser (userid) 
SELECT id FROM users 

EDIT:
die Sorge in den Kommentaren, die 'validated' Wert angehoben zu beantworten, als eine wörtliche ausgewählt werden:

INSERT INTO validateuser (userid, validated) 
SELECT id, 'validated' FROM users 
+0

INSERT INTO validateuser (Benutzer-ID) SELECT ID VON Benutzern? Ich habe noch nie eine solche Abfrage gesehen. Was meinen Sie? Wie kann ich alles, was ich möchte, in eine Abfrage eingeben? –

+1

@ J.Doe genau. Sie können mehr darüber in [MySQL-Dokumentation] (https://dev.mysql.com/doc/refman/5.7/en/insert-select.html) erfahren. – Mureinik

+0

Weil ich andere Werte in der gleichen Tabelle für andere eingeben muss Säulen. Für alle Benutzer muss in einer zweiten Spalte ein Text mit der Bezeichnung "validiert" eingefügt werden. Dies muss für alle Benutzer-IDs gelten. Dein Code funktioniert, aber ich weiß nicht, ob ich mit deinem Vorschlag tun kann, was ich will. –

1

Wie Sie die Ergebnisse der ersten Abfrage mit foreach($select as $index => $rs) iterieren setzen Sie $users auf die ID jeder Zeile der Ergebnisse mit $users = $rs['id'];.

Am Ende der Schleife enthält $users die ID der letzten Zeile, da sie jedes Mal überschrieben wird. Es ist nicht iterierbar (es ist ein Int), also macht foreach ($users as $row){ keinen Sinn.

Sie wahrscheinlich statt $users[] = $rs['id']; tun. Aber wenn Sie sie alle nur einfügen, können Sie es auch nur in einer Abfrage tun, wie die andere Antwort vermuten lässt.

Verwandte Themen