J'essaie d'utiliser la fonction MAX de MySQL pour récupérer les dernières dates de ma table.
$_updates = Mage::getModel('ticket/updates')->getCollection();
$_updates->getSelect()->columns('MAX(created) as max_created')->group(array('status_id'));
Voici la requête résultante:
SELECT `main_table`.*, MAX(created) AS `max_created` FROM `em_ticket_updates` AS `main_table` GROUP BY `status_id`
Le problème est que si tous les champs sont inclus (main_table.*
) il ne fonctionne pas correctement.
Existe-t-il un moyen de supprimer main_table.*
de la requête et utiliser uniquement des champs spécifiques?
Merci.
Une astuce Zend peut être utilisée ici.
$_updates->getSelect()
->reset(Zend_Db_Select::COLUMNS)
->columns('MAX(created) as max_created')
->group(array('status_id'));
REMARQUE:
Pour la collecte EAV, vous devrez ajouter à nouveau le entity_id
ou tu vas avoir une erreur lors du chargement de la collection
$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 fournit la fonctionnalité de addFieldToSelect (). Utilisez le code ci-dessous pour obtenir un champ spécifique.
$Collection = Mage::getModel('showdown/votes')->getCollection();
$Collection->addFieldToSelect('id');
Je reconnais que c'est un ancien poste, mais je pensais publier une solution alternative.
J'ai eu un problème similaire moi-même, j'ai finalement cherché dans la source jusqu'à ce que j'atteigne Zend_Db_Select
Après avoir consulté la Documentation Zend (Exemple 8).
$select = $db->select()
->from(array('p' => 'products'),
array('product_id', 'product_name'));