sql >> Database teknologi >  >> RDS >> Mysql

Hvordan tilføjer man brugerdefineret kolonne i salgs-/ordregitteret i Magento?

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.



  1. Django særskilt gruppe efter forespørgsel på to felter

  2. MySQL - DATE_ADD månedsinterval

  3. MySQL Indsæt fra en database i en anden

  4. Postgres VÆLG hvor WHERE er UUID eller streng