【问题标题】:Get parent and child records from different tables in MySql (one to many)从MySql中的不同表中获取父子记录(一对多)
【发布时间】:2017-06-27 02:47:21
【问题描述】:

我有一个名为 orders 的父表和一个 order_items 的子表。我需要获取客户的订单以及每个订单的相应订单项目。下面是架构:

订单:

Id   | Order_date | Order_value
-------------------------------
1234 | 2016-12-12 | 700.00

订购商品:

Id    | ProductId  | OrderId
----------------------------
8847  | shirt_blue | 1234
8848  | shirt_red  | 1234

我需要一个 JSON 格式的最终​​结果,如下所示:

{
   id: '1234',
   order_date: '2016-12-12',
   order_value: 700.00,
   Items: [
      {id: '8847', productid: 'shirt_blue' },
      {id: '8848', productid: 'shirt_red' }
  ]
}

从 MySql 获取这些记录的最干净和最快的方法是什么?如果有什么不同,我正在使用 NodeJS/Node-MySql。

目前我首先获取订单记录并在我的应用层中循环它们并获取订单项目记录并将它们附加到每条记录。这不是很有效的做事方式。

【问题讨论】:

    标签: mysql node.js


    【解决方案1】:

    您可以试一试Sequelize,这是针对 Node.js 的 ORM 构建,支持 MySQL、PostgreSQL、SQLite 和 MSSQL。 使用 Sequelize,您可以创建反映数据库表的模型。第一步是实例化 sequelize 本身:

    var sequelize = new Sequelize('mysql://user:pass@example.com:3306/dbname');
    

    然后你就可以创建模型了:

    var Order = sequelize.define('Order', {
        order_date: Sequelize.DATE,
        order_value: Sequelize.STRING
    });
    
    Order.sync(); // this is run in order to reflect the changes in your database
    

    您还可以像这样定义模型(数据库表)之间的关系:

    var OrderItem = sequelize.define('OrderItem', {
        // attributes etc...
    });
    
    OrderItem.belongsTo(Order); // this would add OrderId attribute to OrderItem, which is a Foreign Key to Order table
    Order.hasMany(OrderItem); // Likewise
    

    通过创建关系,您可以返回指定OrderOrderItems

    Order.findById(1).then(function(order){
        order.getOrderItems().then(function(orderItems){
            // here you get all order items assigned to given order
        });
    });
    

    就模型(表)的创建和迁移而言,这是一种非常舒适的解决方案。您还可以创建自定义 SQL 语句并通过 sequelize 实例直接运行它们。 查看文档,其中包含大量示例并准确描述了大多数用例。

    【讨论】:

    • 谢谢,我会调查的。
    【解决方案2】:

    较新版本的 MySQL 支持 JSON 对象结果。 这将让您返回嵌套的子数组。

    好处是您可以编写嵌套的 SQL 查询(以便 SQL 可以优化),而不是手动获取 Node.js 中的所有子元素。

    How do I generate nested json objects using mysql native json functions?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多