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.*
を削除し、特定のフィールドのみを使用する方法はありますか?
ありがとう。
ここで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));
MagentoはaddFieldToSelect()機能を提供します。特定のフィールドを取得するには、以下のコードを使用してください。
$Collection = Mage::getModel('showdown/votes')->getCollection();
$Collection->addFieldToSelect('id');
これは古い投稿であると認識していますが、代替ソリューションを投稿すると思いました。
私自身も同様の問題を抱えていたため、最終的にソースを検索してZend_Db_Select
Zend Documentation (例8)を参照した後。
$select = $db->select()
->from(array('p' => 'products'),
array('product_id', 'product_name'));