子查询成为 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"(如“`”),则该查询可以正常运行。
这是逐步发生的事情。
- 运行 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)";
希望对您有所帮助!
我在 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"(如“`”),则该查询可以正常运行。
这是逐步发生的事情。
- 运行 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) FROMmgmx_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)";
希望对您有所帮助!