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
Kommen wir heute gleich zur Sache und sprechen üb...
1. Deinstallieren Sie zuerst npm sudo npm deinsta...
Die detaillierten Schritte zur Installation von m...
Inhaltsverzeichnis Voraussetzungen RN übergibt We...
XHTML ist die derzeit international verbreitete S...
Inhaltsverzeichnis webpack5 Offizieller Start Bau...
Originallink: https://vien.tech/article/138 Vorwo...
Es gibt zwei Lösungen: Eine Möglichkeit ist CSS, b...
<br />Bevor Browser die nächste Generation v...
In diesem Artikel finden Sie das grafische Tutori...
Der folgende Befehl wird häufig verwendet: chmod ...
Das erste Tutorial zur Installation der MySQL-5.7...
Das Anwendungsszenario ist: Die Iframe-Seite hat k...
Informationen zur ersten Installation der MySQL-5...
1.1 Was ist MySQL Multi-Instance? Einfach ausgedr...