php - 将 Mysql 查询转换为 Magento 查询

标签 php mysql magento

实际上这篇文章是为了两个问题,因为第一个问题会引出第二个问题。

我有一个 Mysql 查询,需要在其中选择 2 个表。第一个表有 1 行(主表),第二个表有多行(连接表)。

仅将parent_id和entity_id连接起来即可获得结果,我创建了一个查询,其中它将第二个表的列结果仅连接到一行,然后将其连接到第一个表。

这是查询。

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 a.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

第一个问题是: 它显示了我想要的结果,但它返回了 2 行,其中包含类似的数据,如下面的示例。如何消除第二条记录。

enter image description here

第二个问题: 如何将其转换为 Zend_Framework/Magento $collection 查询。

到目前为止,我有这个查询,但我需要应用上面的查询。

protected function _prepareCollection()
{
    $collection = Mage::getResourceModel($this->_getCollectionClass());
    $collection->getSelect()->join( array('a'=> mgmx_sales_flat_invoice_comment), 'a.parent_id = main_table.entity_id', array('a.comment'));
    $this->setCollection($collection);
    return parent::_prepareCollection();
}

最佳答案

我对 Magneto 并不熟悉,而且它看起来并不简单,所以我不会尝试这样做。

但是,如果您将“相关子查询”从 select 子句中移出并作为子查询移入 from 子句中,则转换可能会更简单。老实说,这种方式可能也更有效。

SELECT `main_table`.* , c.comments
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 
LEFT JOIN (
          SELECT a.parent_id, Group_concat(comment SEPARATOR '----') as comments
          FROM   `mgmx_sales_flat_invoice_comment` a 
          GROUP  BY a.parent_id
          ) c ON  a.parent_id = main_table.entity_id 

----

前一个问题展示了如何在 Magneto Using an expression as a join 中左连接子查询.

将这个逻辑应用到我的建议中,它看起来像这样(看起来)

$query = 'SELECT parent_id, Group_concat(comment SEPARATOR ', ') as comments FROM `mgmx_sales_flat_invoice_comment` GROUP  BY parent_id';
$collection->getSelect()->joinLeft(
    new Zend_Db_Expr('('.$query.')'),
    'main_table.entity_id = t.parent_id',
    array('author_debit_amount')
);

但我不明白别名 t 来自哪里(它在前面引用的问题中使用)

关于php - 将 Mysql 查询转换为 Magento 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47110398/

相关文章:

C# 将数据库表中的所有行显示到 DataGrid

java - 使用 Hibernate 的 ScrollableResults 慢慢读取 9000 万条记录

PHP/Mysql 数字格式化

php - 在 magento 中的特价产品上显示销售图标。仅在首页显示,不在所有页面显示

php - 如何获取 magento 商店的默认结帐网址?

php - 如何在 Zend Framework 中将 URL 作为 URL 的参数传递?

javascript - 按输入形式排名值

JavaScript HttpRequest 总是返回相同的结果

Magento 购物车最低数量

php - 对于此 MYSQL 搜索查询,还有其他更快的执行方法吗?