Wenn in Ihrer _prepareCollection
Methode drucke ich die Abfrage über:
echo $collection->getSelect()->assemble();
Ich verstehe:
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
Durch diese Abfrage erhalte ich immer ein Ergebnis, sogar eine "leere" Zeile, wenn keine Bestellungen auf dem Tisch liegen. Vielmehr denke ich, dass das, was Sie erreichen möchten, mit Unterabfragen erreicht werden kann:
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`;
Um das für Magento zu übersetzen, würde es ungefähr so aussehen:
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();
}
Zu Ihrem Punkt zu den doppelten Trägertiteln, das ist in einem Fall wie diesem zu erwarten. Die einzige Möglichkeit, dies zu umgehen, besteht darin, einen DISTINCT
hinzuzufügen Wort in der Unterabfrage für den Titel, etwa so:
SELECT GROUP_CONCAT(DISTINCT `t`.`title` SEPARATOR ",")
Aber ich bin mir nicht sicher, was Sie mit diesen Daten im Grid machen wollen. Hoffe das hilft.