web-dev-qa-db-ja.com

Magentoで特定のフィールドのみを選択する

MySQLのMAX関数を使用して、テーブルから最新の日付を取得しようとしています。

$_updates = Mage::getModel('ticket/updates')->getCollection();  
$_updates->getSelect()->columns('MAX(created) as max_created')->group(array('status_id'));

これは結果のクエリです:

SELECT `main_table`.*, MAX(created) AS `max_created` FROM `em_ticket_updates` AS `main_table` GROUP BY `status_id` 

これの問題は、すべてのフィールドが含まれている場合(main_table.*)、正しく機能しないことです。

クエリからmain_table.*を削除し、特定のフィールドのみを使用する方法はありますか?

ありがとう。

21
Jenny

ここでZendトリックを使用できます。

$_updates->getSelect()
    ->reset(Zend_Db_Select::COLUMNS)
    ->columns('MAX(created) as max_created')
    ->group(array('status_id'));

注:

EAVコレクションの場合は、entity_idを再追加する必要があります。そうしないと、コレクションのロード時にエラーが発生します

    $collection = Mage::getModel('catalog/product')
        ->getCollection();
    $collection->getSelect()
        ->reset(Zend_Db_Select::COLUMNS)
        ->columns(array('entity_id')); 

    $collection
        ->addAttributeToSelect(array('image','small_image','thumbnail'))
        ->addFieldToFilter('entity_id', array('in' => $simple_ids));
47
clockworkgeek

MagentoはaddFieldToSelect()機能を提供します。特定のフィールドを取得するには、以下のコードを使用してください。

$Collection = Mage::getModel('showdown/votes')->getCollection();
$Collection->addFieldToSelect('id');
6
Neeraj Garg

これは古い投稿であると認識していますが、代替ソリューションを投稿すると思いました。

私自身も同様の問題を抱えていたため、最終的にソースを検索してZend_Db_SelectZend Documentation (例8)を参照した後。

$select = $db->select()
    ->from(array('p' => 'products'),
           array('product_id', 'product_name'));
5
ash