Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara menambahkan Kolom Kustom di kisi penjualan/pesanan di Magento?

Jika di _prepareCollection . Anda metode saya mencetak kueri melalui:

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

Saya mengerti ini:

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

Dengan kueri ini saya akan selalu mendapatkan hasil, bahkan baris "kosong" ketika tidak ada pesanan di atas meja. Sebaliknya, saya pikir apa yang ingin Anda capai dapat dilakukan dengan menggunakan subkueri:

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

Jadi untuk menerjemahkannya untuk Magento, akan terlihat seperti ini:

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

Untuk poin Anda tentang duplikat judul operator, itulah yang diharapkan dalam kasus seperti ini. Satu-satunya cara adalah dengan menambahkan DISTINCT kata dalam sub-kueri untuk judul, seperti ini:

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

Tapi saya tidak yakin apa yang Anda rencanakan dengan data ini di grid. Semoga membantu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ulangi n kali tanpa menggunakan prosedur tersimpan

  2. MySQL:Bagaimana menemukan daun di node tertentu

  3. Refresh konten secara otomatis jika database berubah

  4. Membangun aplikasi Android untuk menjalankan PHP dan MySQL di Tablet Android

  5. mysql mendapatkan nama kolom tabel dalam urutan abjad