Magento仅连接选定的表列,避免歧义

问题描述 投票:0回答:1

我正在尝试联接两个表,然后按product_id对其进行过滤...

问题是两个表都具有相同的列,并且出现以下错误

Integrity constraint violation: 1052 Column 'product_id' in on clause is ambiguous, query was: SELECT COUNT(*) FROM `booking_ticket` AS `main_table`
 INNER JOIN `sales_flat_order_item` AS `order_item` ON order_item_id=order_item.item_id
 INNER JOIN `sales_flat_order` AS `order` ON order_item.order_id=order.entity_id
 LEFT JOIN `marketplace_commission` AS `marketplace_data` order.entity_id=marketplace_data.order_id WHERE (`product_id` IN('189'))

我这样加入

$this->getSelect()
            // ->reset(Zend_Db_Select::COLUMNS)
            // ->columns()
            ->joinLeft( // Product ID, Order ID
                array('marketplace_data' => $this->getTable('marketplace/commission')),
                'order.entity_id=marketplace_data.order_id',
                array(
                  "origin" => "marketplace_data.origin"
                )
            );

然后像这样过滤

$ticketCodes = Mage::getModel('booking/ticket')->getCollection()
      ->joinOrderData()->joinMarketPlaceData()
      ->addFieldToFilter('product_id',array('in'=> $id));

我需要加入我的市场表而不加入product_id列,因为订单表已经具有产品ID。我该如何实现?我已经尝试过重置,因为上面已经提到。没有效果。

提前谢谢您

php mysql magento left-join ambiguous
1个回答
0
投票

您需要对product_id列使用完全限定的列名(假设product_id在order_item表中)

SELECT COUNT(*) FROM `booking_ticket` AS `main_table`
INNER JOIN `sales_flat_order_item` AS `order_item` ON order_item_id=order_item.item_id
INNER JOIN `sales_flat_order` AS `order` ON order_item.order_id=order.entity_id
LEFT JOIN `marketplace_commission` AS `marketplace_data` 
  ON `order_item`.product_id=marketplace_data.product_id
WHERE (`order_item`.`product_id` IN('189'))
© www.soinside.com 2019 - 2024. All rights reserved.