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. तालिका या स्तंभ के शीर्षक में SQL कीवर्ड का उपयोग करना

  2. date_format के साथ mysql तारीख की तुलना

  3. क्वेरी स्टेटमेंट के बाहर mysql क्वेरी से मूल्य कैसे प्राप्त करें?

  4. संख्याओं को varchar . के रूप में संग्रहित करना

  5. MySQL और MariaDB के कई कार्यों का उपयोग करना सीखें - भाग 2