Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak dodać niestandardową kolumnę w siatce sprzedaży/zamówień w Magento?

Jeśli w Twojej _prepareCollection metoda Wydrukuję zapytanie poprzez:

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

Rozumiem:

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

Dzięki temu zapytaniu zawsze dostanę wynik, nawet „pusty” wiersz, gdy na stole nie ma zamówień. Myślę raczej, że to, co chcesz osiągnąć, można osiągnąć za pomocą podzapytań:

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

Aby przetłumaczyć to dla Magento, wyglądałoby to mniej więcej tak:

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

Do twojego punktu na temat zduplikowanych tytułów przewoźników, czego można się spodziewać w takim przypadku. Jedynym sposobem na obejście tego jest dodanie DISTINCT słowo w podzapytaniu w tytule, na przykład:

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

Ale nie jestem pewien, co planujesz zrobić z tymi danymi w siatce. Mam nadzieję, że to pomoże.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:BŁĄD 1227 (42000):Odmowa dostępu - Nie można UTWORZYĆ UŻYTKOWNIKA

  2. uporządkować według.... numerów? Pomóż mi sortować adresy IP

  3. mysql przechowywanie danych i wydajność zapytań z php

  4. DataTables przy użyciu PHP z MySQL:Jak zmodyfikować zapytanie mysql?

  5. Blokowanie stołu za pomocą hibernacji