Ако във вашата _prepareCollection
метод Отпечатвам заявката чрез:
echo $collection->getSelect()->assemble();
Разбрах това:
SELECT
`main_table`.*,
group_concat(sales_flat_shipment_track.track_number SEPARATOR ",") AS `track_number`,
group_concat(sales_flat_shipment_track.title SEPARATOR ",") AS `title`
FROM `sales_flat_order_grid` AS `main_table`
INNER JOIN `sales_flat_shipment_track`
ON main_table.entity_id = sales_flat_shipment_track.order_id
С тази заявка винаги ще получавам резултат, дори и "празен" ред, когато няма поръчки на масата. По-скоро мисля, че това, което се опитвате да постигнете, може да се направи с помощта на подзаявки:
SELECT
`main_table`.*,
(
SELECT
group_concat(`t`.`track_number` SEPARATOR ",") AS `track_number`
FROM `sales_flat_shipment_track` AS `t`
WHERE `main_table`.`entity_id` = `t`.`order_id`
),
(
SELECT
group_concat(`t`.`title` SEPARATOR ",") AS `title`
FROM `sales_flat_shipment_track` as `t`
WHERE `main_table`.`entity_id` = `t`.`order_id`
)
FROM `sales_flat_order_grid` AS `main_table`;
Така че, за да преведем това за Magento, ще изглежда нещо подобно:
protected function _prepareCollection()
{
$collection = Mage::getResourceModel('sales/order_grid_collection');
$collection->getSelect()
->from(
array(),
array(
'track_number' => new Zend_Db_Expr('(
SELECT GROUP_CONCAT(`t`.`track_number` SEPARATOR ",")
FROM `sales_flat_shipment_track` as `t`
WHERE `main_table`.`entity_id` = `t`.`order_id`
)'),
'title' => new Zend_Db_Expr('(
SELECT GROUP_CONCAT(`t`.`title` SEPARATOR ",")
FROM `sales_flat_shipment_track` as `t`
WHERE `main_table`.`entity_id` = `t`.`order_id`
)'),
)
);
$this->setCollection($this);
return parent::_prepareCollection();
}
Що се отнася до дублиращите се заглавия на оператора, това може да се очаква в случай като този. Единственият начин да го заобиколите е да добавите DISTINCT
дума в подзаявката за заглавието, както следва:
SELECT GROUP_CONCAT(DISTINCT `t`.`title` SEPARATOR ",")
Но не съм сигурен какво смятате да правите с тези данни в мрежата. Надявам се това да помогне.