sql >> Database >  >> RDS >> Mysql

Hoe voeg ik een aangepaste kolom toe aan het verkoop-/bestelraster in Magento?

Als in uw _prepareCollection methode Ik print de vraag via:

echo $collection->getSelect()->assemble();

Ik krijg dit:

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

Door deze vraag krijg ik altijd een resultaat, zelfs een "lege" rij als er geen bestellingen op tafel liggen. Ik denk eerder dat wat je probeert te bereiken gedaan kan worden met behulp van subquery's:

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`;

Dus om dat voor Magento te vertalen, ziet het er ongeveer zo uit:

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();
}

Op uw punt over de dubbele titels van vervoerders, dat is te verwachten in een geval als dit. De enige manier om dit te omzeilen is door een DISTINCT . toe te voegen woord in de subquery voor de titel, zoals dit:

SELECT GROUP_CONCAT(DISTINCT `t`.`title` SEPARATOR ",")

Maar ik weet niet zeker wat je van plan bent te doen met deze gegevens in het raster. Ik hoop dat dat helpt.



  1. Hoe de MySQL-database van WAMP te herstellen?

  2. FILEGROUPPROPERTY() gebruiken in SQL Server

  3. MariaDB 10.0 upgraden naar 10.3.9 op Ubuntu 16.04

  4. PHP :Ongedefinieerde functie mysql_connect()