Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytanie zagnieżdżone w węźle js przy użyciu mysql

Widzę dwa problemy w twoim kodzie:

  • Wzywasz connection.end() synchronicznie, ale zapytania działają w przepływie asynchronicznym. Musisz wywołać connection.end() dopiero po zakończeniu drugiego zapytania.
  • Używasz zwykłego for pętla do wykonywania połączeń asynchronicznych (zewnętrzna pętla).

Aby osiągnąć to, co próbujesz zrobić, musisz wziąć pod uwagę te asynchroniczne scenariusze. Możesz użyć promises lub moduł taki jak async , który zapewnia wiele metod radzenia sobie z przepływami asynchronicznymi, takimi jak async.each() :

connection.query(queryString, function(err, rows, fields) {
    if (err) throw err;

    async.each(rows, function (row, callback) {
        console.log('Product Name: ', row.product_name);
        var emp_query = 'SELECT * FROM tbl_employer';
        connection.query(queryString, function(emp_err, emp_rows, emp_fields) {
            if (emp_err) callback(emp_err);
            for (var e in emp_rows) {
                console.log('Employer Name: ', emp_rows[e].company_name);
            }
            callback();
        }); 
    });
    }, function (err) {
        connection.end();
    }
});

Teraz zagwarantuje, że connection.end() zostanie wywołany po zakończeniu wszystkich zapytań.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego wykonanie zapytania wstawiającego czasami trwa tak długo?

  2. Jak sprawić, by funkcja SUM w MySQL zwróciła „0”, jeśli nie znaleziono żadnych wartości?

  3. Czy można użyć SQL do sortowania według daty, ale umieścić daty puste na końcu zestawu wyników?

  4. post zmieniono nazwę pliku z przesyłania do bazy danych

  5. Zwróć domyślny wynik dla wartości IN niezależnie od