Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да добавя персонализирана колона в мрежата за продажби/поръчки в Magento?

Ако във вашата _prepareCollection метод Отпечатвам заявката чрез:

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

Разбрах това:

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

С тази заявка винаги ще получавам резултат, дори и "празен" ред, когато няма поръчки на масата. По-скоро мисля, че това, което се опитвате да постигнете, може да се направи с помощта на подзаявки:

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

Така че, за да преведем това за Magento, ще изглежда нещо подобно:

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

Що се отнася до дублиращите се заглавия на оператора, това може да се очаква в случай като този. Единственият начин да го заобиколите е да добавите DISTINCT дума в подзаявката за заглавието, както следва:

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

Но не съм сигурен какво смятате да правите с тези данни в мрежата. Надявам се това да помогне.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. executemany за MySQLdb грешка за голям брой редове

  2. Заявка за актуализиране на mysql с подзаявка

  3. Загубена връзка с MySQL сървър по време на заявка

  4. Как да използвам множество бази данни за едно приложение на rails 3.1 в Heroku?

  5. Какъв е еквивалентът на командата spool в MySQL?