子查询成为 Magento 中 Mysql 查询中的列

Subquery becomes column in Mysql query in Magento

我在 Magento ($Collection) 中有一个查询,我在其中加入了一个 table 以获得我想要的结果。

这是我的$Collection

protected function _prepareCollection()
{
    $collection = Mage::getResourceModel($this->_getCollectionClass());
    $stmp = "(SELECT GROUP_CONCAT(comment SEPARATOR '----' ) FROM mgmx_sales_flat_invoice_comment a WHERE a.parent_id = `main_table`.`entity_id` group by parent_id)";
    $collection->getSelect()->join( array('a'=> mgmx_sales_flat_invoice_comment), 'a.parent_id = main_table.entity_id', $stmp);


    $this->setCollection($collection);
    echo $collection->getSelect();die();
    return parent::_prepareCollection();
}

这个$Collection,如果你注意到我附和了它。它将打印此查询。

SELECT 
     `main_table`.*, 
           (SELECT 
                  GROUP_CONCAT
                  (comment SEPARATOR '----' ) 
            FROM 
                  mgmx_sales_flat_invoice_comment a 
            WHERE 
                  a.parent_id = main_table`.`entity_id 
            GROUP BY 
                  parent_id)
  FROM 
      `mgmx_sales_flat_invoice_grid` 
   AS 
      `main_table` 
   INNER JOIN 
       `mgmx_sales_flat_invoice_comment` 
   AS 
       `a` 
    ON 
         a.parent_id = main_table.entity_id

另一方面,如果我可以删除其中的一些 "things"(如“`”),则该查询可以正常运行。

这是逐步发生的事情。

  1. 运行 Mysql 中的查询将 return 出错

1054 - Unknown column '(SELECT GROUP_CONCAT(comment SEPARATOR '----' ) FROM mgmx_sales_flat_invoice_comment a WHERE a.parent_id = main_table.entity_id group by parent_id)' in 'field list'

如果我删除(SELECT 语句前后的``,如下所示

SELECT `main_table`.*, 
    (SELECT 
            GROUP_CONCAT(comment SEPARATOR '----' ) 
     FROM 
            mgmx_sales_flat_invoice_comment a
     WHERE a.parent_id = main_table`.`entity_id 
     group by parent_id) 
FROM `mgmx_sales_flat_invoice_grid` 
AS `main_table`
INNER JOIN `mgmx_sales_flat_invoice_comment` 
AS `a` ON a.parent_id = main_table.entity_id

它将改为显示此错误

right syntax to use near '.entity_id group by parent_id) FROM mgmx_sales_flat_invoice_grid AS `main_ta' at line 1

因为这个

WHERE a.parent_id = main_table`.`entity_id 

如何删除那个 `` 以及如何按最终的 $collection 查询分组。

此处 GROUP_CONCAT 函数中的分隔符 ---- 造成了问题。

如果您使用 ==== 等不同的分隔符,问题就会得到解决。

喜欢,

$stmp = "(SELECT GROUP_CONCAT(comment SEPARATOR '====' ) FROM mgmx_sales_flat_invoice_comment a WHERE a.parent_id = `main_table`.`entity_id` group by parent_id)";

希望对您有所帮助!