1

如果我有一个 MySQL 查询返回一个将在WHERE子句中再次使用的值,这是否适用于 Node.js 的异步执行流程?

一般情况下可能是这样:

SELECT
customerId FROM Customers
WHERE customerName=nikolas

然后结果将像这样存储:

var customerId = customerId

并在另一个查询中重用:

SELECT
orderId FROM Orders
WHERE customerId=customerId

这会获取我在第一个查询中返回orderId的客户吗?Nikolas

书面查询会按顺序运行吗?

4

2 回答 2

1

这实际上取决于您使用的模块。最常用的驱动程序之一node-mysql是异步的,因此代码不会按顺序运行。相反,您必须使用回调:

var query1 = 'SELECT customerId FROM Customers WHERE customerName = nikolas';
var query2 = 'SELECT orderId FROM Orders WHERE customerId = ';

connection.connect();
connection.query(query1, function(err, rows, fields) {
  var customerId = rows[0].customerId;
  connection.query(query2 + customerId, function(err, rows, fields) {
    connection.end();
    // results are here
  });
});

在 Node.js 中,您通常希望编写异步代码。某处可能有一个同步 MySQL 驱动程序模块,但大多数都没有他们想要通过同步数据库调用来阻止他们的进程的情况。

于 2013-10-07T00:35:11.833 回答
0

在@hexacyanide 编写的代码中。在第一个查询运行之前,第二个查询不会运行,因为代码正在等待第一个查询的响应。这样就回答了您对顺序的疑问。而且您不需要为此使用两个查询。您可以简单地连接这两个表并在单个查询中获取结果。像这样的东西:

SELECT orders.orderId 
       FROM Orders orders 
       JOIN Customers customers 
       ON orders.customerId = customers.customerId
       WHERE customers.customerName='Nikolas'
于 2018-05-11T09:08:31.120 回答