Sag es im Voraus Nodejs liest die Datenbank als asynchronen Vorgang, sodass der Code weiterhin ausgeführt wird, bevor die Datenbank die Daten gelesen hat. Falsche Version der For-SchleifeGeben Sie zuerst den Code frei und erklären Sie ihn im Voraus. Hier ist die Kapselung des SQL-Vorgangs: sql.sever (Datenbankverbindungspool, Spleißfunktion für SQL-Anweisungen, Rückruffunktion). für (lass i = 0; i <views.xuehao.length; i++) { sql.sever(Pool,sql.select(["Name"],"Registrierungsinformationen",["xuehao="+sql.escape(views.xuehao[i])]),Funktion(Daten){ sql.sever(pool,sql.insert("personnelqueue",["xuehao","name","selfgroup","time"],[sql.escape(views.xuehao[i]),data[0].name,selfgroup,'NOW()'],true),function(){ let allGroup = ['Android', 'ios', 'Web', 'Backend', 'Product']; //Hier ist der E-Mail-bezogene Code let group = allGroup[selfgroup - 1]; let mailmsg = "Hallo," + group + "Die Gruppengenehmigungsliste wurde übermittelt, bitte überprüfen Sie sie so bald wie möglich!"; mail.mailepass(mailmsg); res.schreiben(JSON.stringify({ Stil: 1, msg:"Die Liste wurde übermittelt und wartet auf die Überprüfung durch den Administrator!" })); res.ende(); }) }) } Im obigen Code wird zuerst die Datenabfrage und dann die Dateneinfügung durchgeführt (hier gehen wir davon aus, dass es 2 Daten gibt). Nach gesundem Menschenverstand ist die gewünschte Ausführungsreihenfolge: Abfrage einfügen, Abfrage einfügen. Allerdings ist es nicht so einfach, wie wir denken. Obwohl der Einfügevorgang tatsächlich in den Rückruf der Datenbankabfrage geschrieben wird, lautet die tatsächliche Reihenfolge: Abfrageabfrage. Sobald zwei Abfragen direkt ausgeführt werden, meldet der nachfolgende Code einen Fehler. Bevor der Rückruf erfolgen kann, wurde die zweite Schleife bereits ausgeführt. Verbesserte for-Loop-VersionMySQL kann die Abfrage und Einfügung mit einer Anweisung abschließen, das Format ist: INSERT IGNORE INTO insert table table name (item1, item2) SELECT item1, item2 FROM query table table name WHERE, daher habe ich mir folgende Lösung überlegt. für (lass i = 0; i < views.xuehao.length; i++) { sql.sever(pool, 'INSERT IGNORE INTO personnelqueue (xuehao,name,selfgroup,time) SELECT xuehao,name,selfgroup,NOW() FROM registryinformation WHERE xuehao=' + sql.escape(views.xuehao[i]) + ' und pass=' + status, funktion () { wenn (i == Ansichten.xuehao.Länge - 1) { let allGroup = ['Android', 'ios', 'Web', 'Backend', 'Produkt']; lass Gruppe = alleGruppe[Selbstgruppe - 1]; let mailmsg = "Hallo," + group + "Die Gruppengenehmigungsliste wurde übermittelt, bitte überprüfen Sie sie so bald wie möglich!"; mail.mailepass(mailmsg); res.schreiben(JSON.stringify({ Stil: 1, msg: "Die Liste wurde übermittelt und wartet auf die Überprüfung durch den Administrator!" })); res.ende(); } }) } Auf diese Weise funktioniert die Datenbank ordnungsgemäß und ihr Zweck wird erreicht. Doch bei genauerem Nachdenken weist dieser Ansatz noch immer Mängel auf. Bei kleinen Datenmengen ist das kein Problem, bei großen Datenmengen führt dies jedoch dazu, dass das Programm mehrere Verbindungen mit der Datenbank herstellen muss, was die Serverlast erhöht. Verbesserte VersionIn Kombination mit dem vorherigen Defekt müssen wir, wie der Name schon sagt, dieses Mal die Anzahl der Verbindungen des Programms mit der Datenbank reduzieren. Daher schreiben wir Einfügung und Abfrage nicht mehr zusammen, sondern trennen sie und führen Einfügung und Abfrage im Stapelbetrieb durch, um so die abgefragten Daten für die Stapeleinfügung zu verwenden. Der Code lautet wie folgt: let sqlString = 'SELECT xuehao,name,selfgroup FROM registryinformation WHERE pass=' + status + ' AND (xuehao=' + sql.escape(views.xuehao[0]); für (lass i = 1; i < views.xuehao.length; i++) { sqlString += ' ODER xuehao=' + sql.escape(views.xuehao[i]); } : Der SQL-String ist eine Zeichenfolge, die die Daten enthält, die Sie in SQL Server verwenden. sql.sever(Pool, SQLString, Funktion (Daten) { //SQL-Anweisungen spleißen und einfügen let istSqlStr = 'INSERT IGNORE INTO personnelqueue (xuehao,name,selfgroup,time) VALUES (' + data[0].xuehao + ',' + sql.escape(data[0].name) + ',' + data[0].selfgroup + ',NOW())'; für (let j = 1; j < data.length; j++) { istSqlStr += ',(' + data[j].xuehao + ',' + sql.escape(data[j].name) + ',' + data[j].selfgroup + ',' + 'JETZT())'; } sql.sever(pool, istSqlStr, function () { let allGroup = ['Android', 'ios', 'Web', 'Backend', 'Produkt']; lass Gruppe = alleGruppe[Selbstgruppe - 1]; let mailmsg = "Hallo," + group + "Die Gruppengenehmigungsliste wurde übermittelt, bitte überprüfen Sie sie so bald wie möglich!"; mail.mailepass(mailmsg); res.schreiben(JSON.stringify({ Stil: 1, msg: "Die Liste wurde übermittelt und wartet auf die Überprüfung durch den Administrator!" })); res.ende(); }) }) Auffüllen Syntax für Batchabfragen (und und oder werden hier gemischt) SELECT Spaltenname, Spaltenname FROM Tabellenname WHERE Bedingung AND (Element1='xxx' ODER Element1='yyy'); ZusammenfassenDies ist das Ende dieses Artikels über MySQL, das Massendaten aus einer Tabelle abfragt und in eine andere Tabelle einfügt. Weitere verwandte MySQL-Abfragen und das Einfügen von Massendaten in eine andere Tabelle finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Implementierung der Docker-Container-Verbindung und -Kommunikation
>>: Detaillierte Erläuterung des Vue-Routing-Routers
Inhaltsverzeichnis 1. Wie verwende ich Mixin? 2. ...
Beim Öffnen ausländischer Websites werden häufig ...
Inhaltsverzeichnis Was ist Abflachung? Rekursion ...
dig - Dienstprogramm zur DNS-Suche Wenn beim Zugr...
Während der Systemwartung müssen Sie möglicherwei...
1. Idee Es dauerte nur 6 Sekunden, um 1.000.000 D...
Da immer mehr Projekte bereitgestellt werden, wer...
Abschnitt Studieninhalte Std 1 Webdesign-Übersich...
Auf dem heimischen Markt besteht noch immer ein g...
Finden Sie das Problem Ich habe vor Kurzem Django...
1. MySQL-Index Index: Eine Datenstruktur, die MyS...
1. Übergeordnete Komponenten können Daten über Re...
Der Autor arbeitet seit über einem Jahr an einem ...
Schritt 1: Holen Sie sich die MySQL YUM-Quelle Ge...
herunterladen http://nginx.org/en/download.html E...