Hvis du er i din _prepareCollection
metode jeg udskriver forespørgslen via:
echo $collection->getSelect()->assemble();
Jeg forstår dette:
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
Ved denne forespørgsel vil jeg altid få et resultat, selv en "tom" række, når der ikke er nogen ordrer på bordet. Jeg tror snarere, at det, du forsøger at opnå, kan gøres ved hjælp af underforespørgsler:
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`;
Så for at oversætte det til Magento, ville det se sådan ud:
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();
}
Til din pointe om de duplikerede transportørtitler, det kan forventes i et tilfælde som dette. Den eneste måde at undgå det på er at tilføje en DISTINCT
ord i underforespørgslen til titlen, som dette:
SELECT GROUP_CONCAT(DISTINCT `t`.`title` SEPARATOR ",")
Men jeg er ikke sikker på, hvad du planlægger at gøre med disse data i gitteret. Håber det hjælper.