Php SQL从Magento获取订单项目?

Php SQL从Magento获取订单项目?,php,mysql,magento,magento-1.9,magento2,Php,Mysql,Magento,Magento 1.9,Magento2,我需要从数据库中获取要发送的有序物理项的列表。列表需要包括名称、sku、数量、价格、重量和尺寸 我们如何在不使用Magento自己的框架组件的情况下实现这一点 问题是,如果一个产品包含选项,它会按不同的产品类型(简单、捆绑、可配置等)和不同的产品ID在表中多次出现 $items = array(); $sql = ( "SELECT oi.name, oi.sku, oi.qty_ordered, oi.price, oi.weight FROM {$db->prefix}sal

我需要从数据库中获取要发送的有序物理项的列表。列表需要包括名称、sku、数量、价格、重量和尺寸

我们如何在不使用Magento自己的框架组件的情况下实现这一点

问题是,如果一个产品包含选项,它会按不同的产品类型(简单、捆绑、可配置等)和不同的产品ID在表中多次出现

$items = array();

$sql = (
  "SELECT oi.name, oi.sku, oi.qty_ordered, oi.price, oi.weight
  FROM {$db->prefix}sales_flat_order_item oi
  WHERE oi.order_id = ". (int)$order_entity_id .";"
);

if ($result = $mysqli->query($sql)) {

  while ($row = $result->fetch_assoc()) {

    $items[] = [
      'name'                   => $row['name'],
      'sku'                    => $row['sku'],
      'quantity'               => (float)$row['qty_ordered'],
      'unit_price'             => (float)$row['price'],
      'unit_weight'            => (float)$row['weight'],
      //'unit_length'            => (float)$row['length'], // Not present?
      //'unit_width'             => (float)$row['width'], // Not present?
      //'unit_height'            => (float)$row['height'], // Not present?
    ];
  }

  $result->close();
}
如果我通过过滤器
和product_type='simple'
仅获取简单产品,则它们不包含价格。

尝试以下方法:

SELECT ord_items.name, ord_items.sku, ord_items.qty_ordered, ord_items.weight, ord_items.price
FROM sales_flat_order_item as ord_items
WHERE ord_items.product_type = 'configurable' OR ord_items.product_type = 'bundle';
请注意,对于Magento,SKU是一个标识符,在sales_平面表中,该属性用于将捆绑产品或可配置产品链接到其简单产品。父产品(可配置或捆绑)具有查询中所需的所有信息


*通过此查询,我们假设您在此商店只销售捆绑产品或可配置产品。

如果有一个可配置产品具有多个相同价格的简单产品,则价格将仅保存在可配置产品中。因此,您不应该使用“简单产品”过滤器。 尝试下面的查询

SELECT orders.increment_id AS increment_id,
       orders.status AS order_status,
       orders.customer_email AS customer_email,
       orders.coupon_code AS coupon_code,
       items.name AS item_name,
       items.item_id AS order_item_id,
       items.sku AS item_sku,
       items.base_price AS item_base_price,
       items.price_incl_tax AS item_price,
       items.qty_ordered AS qty_ordered,
       items.product_id AS product_id,
       items.weight AS Weight
    FROM sales_flat_order_item AS items
    LEFT JOIN sales_flat_order AS orders
    ON items.order_id = orders.entity_id 
  WHERE 
    orders.entity_id = 18229 

这为您提供了简单和可配置产品的详细信息,您可以使用条件(if/else)对内容进行归档

您好,如果您查看可配置或捆绑产品行中的SKU,则该SKU与该行相关的简单产品的SKU完全相同。如果在您的目录中有一些订单可能只包含未由可配置产品设置的simples,那么恐怕您应该应用一些逻辑。感谢您的反馈。我不确定sku在Magento中是强制的还是可选的。在大多数其他电子商务平台中,它们是可选的。如果它们是按sku分组的,我仍然不需要什么字段来排除价格、数量等方面的其他字段。对于只有简单产品的订单,这些字段不会返回任何内容。当然,这就是我在上面的评论。在没有任何逻辑的情况下实现这一点的唯一方法是在两个查询中分离。Magento以“不同的方式”将简单产品保存在表sales_flat_order_item中,具体取决于简单产品是由可配置的用户购买的还是直接由简单用户购买的。