2010-11-10 6 views
4
function getIdModelsSliderJuwels(){ 
$collection = Mage::getModel("catalog/product")->getCollection(); 
$collection->addAttributeToFilter("attribute_set_id", 27); 
    $collection->addAttributeToSelect('modellijnen'); 
    // $collection->setRandomOrder(); 
    // $collection->getSelect()->limit( 5 ); 
return $collection; 
} 

Salut,requête limite magento + commande par rand()

Je voudrais savoir comment définir une limite à votre requête en cours d'exécution dans Magento car $collection->getSelect()->limit(5); ne fonctionne pas.

Également comment sélectionner de manière aléatoire, $collection->setRandomOrder(); ne fonctionne pas non plus.

txs.

+0

Qu'est-ce que "ne fonctionne pas" signifie exactement? Quelle erreur obtenez-vous? –

+0

Essayez d'afficher la requête SQL résultante: echo $ collection-> getSelect(); –

+0

avec limite je ne reçois aucune erreur mais je récupère tous modellijnen au lieu de 5 –

Répondre

3

essayez d'utiliser

$ collection-> SetPageSize (5) -> setCurPage (1);

8

setRandomOrder ne fonctionne pas pour les collections de produits, uniquement pour les produits connexes. Vous devrez vous-même ajouter avec ce code:

$collection->getSelect()->order(new Zend_Db_Expr('RAND()')); 

Un raccourci pour définir à la fois la taille de la page et le numéro en même temps est:

$collection->setPage($pageNum, $pageSize); 
3

Comme dit clockworkgeek, utilisez la méthode $collection->getSelect()->order(...) pour randomiser la commande. Pour limiter à tout $n nombre d'articles que vous pouvez également utiliser

$collection->getSelect()->limit($n); 
+0

Est-ce vraiment un travail? –

+1

Je l'ai en train de travailler sur un magasin live. –

0

aide ORDER BY RAND() retourner une liste d'éléments dans un ordre aléatoire, il faudra une analyse complète de la table et trier. Cela peut affecter négativement les performances sur un grand nombre de lignes dans la table.

Il existe plusieurs solutions possibles pour optimiser cette requête. Magento fournit une solution native pour cela.

La méthode orderRand() de Varien_Db_Select et l'adaptateur de base de données permet de spécifier un ordre aléatoire et un index de levier pour ORDER BY. Indiquez un nom d'une colonne indexée entier à utiliser dans la clause ORDER BY, par exemple:

$collection->getSelect()->orderRand('main_table.entity_id'); 

Voir Varien_Db_Adapter_Pdo_Mysql::orderRand() pour les détails de mise en œuvre.