Als in uw _prepareCollection
methode Ik print de vraag via:
echo $collection->getSelect()->assemble();
Ik krijg dit:
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
Door deze vraag krijg ik altijd een resultaat, zelfs een "lege" rij als er geen bestellingen op tafel liggen. Ik denk eerder dat wat je probeert te bereiken gedaan kan worden met behulp van subquery's:
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`;
Dus om dat voor Magento te vertalen, ziet het er ongeveer zo uit:
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();
}
Op uw punt over de dubbele titels van vervoerders, dat is te verwachten in een geval als dit. De enige manier om dit te omzeilen is door een DISTINCT
. toe te voegen woord in de subquery voor de titel, zoals dit:
SELECT GROUP_CONCAT(DISTINCT `t`.`title` SEPARATOR ",")
Maar ik weet niet zeker wat je van plan bent te doen met deze gegevens in het raster. Ik hoop dat dat helpt.