Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để thêm Cột tùy chỉnh trong lưới bán hàng / đơn hàng trong Magento?

Nếu trong _prepareCollection của bạn phương pháp tôi in truy vấn qua:

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

Tôi nhận được cái này:

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

Bằng cách truy vấn này, tôi sẽ luôn nhận được một kết quả, ngay cả một hàng "trống" khi không có đơn đặt hàng nào trên bảng. Đúng hơn, tôi nghĩ những gì bạn đang cố gắng đạt được có thể được thực hiện bằng cách sử dụng các truy vấn con:

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

Vì vậy, để dịch nó cho Magento, nó sẽ trông giống như sau:

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

Đối với quan điểm của bạn về các tiêu đề nhà cung cấp dịch vụ trùng lặp, điều đó được mong đợi trong trường hợp như thế này. Cách duy nhất để giải quyết vấn đề này là thêm DISTINCT từ trong truy vấn phụ cho tiêu đề, như sau:

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

Nhưng tôi không chắc bạn định làm gì với dữ liệu này trong lưới. Hy vọng điều đó sẽ hữu ích.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mối quan hệ 1-1 liên quan đến nhiều bảng

  2. Chèn hàng loạt MySQL qua PHP

  3. Thay đổi mã từ MySQL sang PDO

  4. Php addlashes sql injection vẫn còn hiệu lực?

  5. Tại sao các số nguyên trong bộ dữ liệu hàng của cơ sở dữ liệu có hậu tố 'L'?