Om i din _prepareCollection
metod Jag skriver ut frågan via:
echo $collection->getSelect()->assemble();
Jag förstår detta:
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
Genom denna fråga kommer jag alltid att få ett resultat, även en "tom" rad när det inte finns några beställningar på bordet. Snarare tror jag att det du försöker uppnå kan göras med hjälp av subqueries:
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å för att översätta det för Magento skulle det se ut ungefär så här:
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();
}
Till din poäng om de dubbla operatörstitlarna, det är att förvänta sig i ett fall som detta. Det enda sättet att undvika det är att lägga till en DISTINCT
ord i underfrågan för titeln, så här:
SELECT GROUP_CONCAT(DISTINCT `t`.`title` SEPARATOR ",")
Men jag är inte säker på vad du planerar att göra med denna information i rutnätet. Hoppas det hjälper.