Jika di _prepareCollection
. Anda metode saya mencetak kueri melalui:
echo $collection->getSelect()->assemble();
Saya mengerti ini:
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
Dengan kueri ini saya akan selalu mendapatkan hasil, bahkan baris "kosong" ketika tidak ada pesanan di atas meja. Sebaliknya, saya pikir apa yang ingin Anda capai dapat dilakukan dengan menggunakan subkueri:
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`;
Jadi untuk menerjemahkannya untuk Magento, akan terlihat seperti ini:
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();
}
Untuk poin Anda tentang duplikat judul operator, itulah yang diharapkan dalam kasus seperti ini. Satu-satunya cara adalah dengan menambahkan DISTINCT
kata dalam sub-kueri untuk judul, seperti ini:
SELECT GROUP_CONCAT(DISTINCT `t`.`title` SEPARATOR ",")
Tapi saya tidak yakin apa yang Anda rencanakan dengan data ini di grid. Semoga membantu.