Выберите только определенные поля в Magento
Я пытаюсь использовать функцию MAX MySQL для получения последних дат из моей таблицы.
$_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.*
из запроса и использовать только определенные поля?
Спасибо.
Ответы
Ответ 1
Здесь можно использовать трюк 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));
Ответ 2
Magento обеспечивает добавление addFieldToSelect(). Используйте код ниже, чтобы получить конкретное поле.
$Collection = Mage::getModel('showdown/votes')->getCollection();
$Collection->addFieldToSelect('id');
Ответ 3
Я понимаю, что это старый пост, но я думал, что отправлю альтернативное решение.
У меня была аналогичная проблема, я, в конце концов, искал источник, пока не достиг Zend_Db_Select
. После консультации с Zend Documentation (пример 8).
$select = $db->select()
->from(array('p' => 'products'),
array('product_id', 'product_name'));