Se nella tua _prepareCollection
metodo Stampo la query tramite:
echo $collection->getSelect()->assemble();
Ho questo:
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
Con questa query otterrò sempre un risultato, anche una riga "vuota" quando non ci sono ordini sul tavolo. Piuttosto, penso che ciò che stai cercando di ottenere può essere fatto usando le sottoquery:
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`;
Quindi per tradurlo per Magento, sembrerebbe qualcosa del genere:
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();
}
Per quanto riguarda i titoli dei vettori duplicati, c'è da aspettarselo in un caso come questo. L'unico modo per aggirare il problema è aggiungere un DISTINCT
word nella sottoquery per il titolo, in questo modo:
SELECT GROUP_CONCAT(DISTINCT `t`.`title` SEPARATOR ",")
Ma non sono sicuro di cosa intendi fare con questi dati nella griglia. Spero di esserti stato d'aiuto.