Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je souhaite faire du page/page sur une liste de résultats.
Pour optimiser un minimum mes requêtes j'utilise SQL_CALC_FOUND_ROWS.
Mon exemple :
//Première requête qui récupère le nombre d enregistrement SELECT count(id) FROM matable; //Deuxième requête qui récupère simplement les résultats de ma page SELECT id FROM matable LIMIT 0,10;
Vous voyez ici que nous utilisons 2 requêtes.
Je souhaites donc utiliser ceci :
//Je récupère simplement les résultats de ma page SELECT SQL_CALC_FOUND_ROWS id FROM matable LIMIT 0,10; //Puis j execute cette simple requete pour savoir le nombre d element qu il y'aurait sans le limit SELECT FOUND_ROWS( );
Comme vous pouvez le voir ce code est plus optimisé.
Je viens donc sur ce forum pour savoir comment intégrer ce système quand j'utilise :
$select = $this->select(); $select->from(array('t' => 'matable'));
Merci d'avance.
Dernière modification par docaze21 (27-04-2009 17:21:28)
Hors ligne
$tbl = New MaTable(); $rowset= $tbl->fetchAll(); count($rowset);
Une seule requête pour obtenir et les données et le nombre d'élément
voir
http://framework.zend.com/manual/fr/zen … wset.fetch
a+jyt
Dernière modification par sekaijin (27-04-2009 17:51:19)
Hors ligne
Oui mais cela ne me convient pas.
Car cela reviendra a faire 2 requêtes.
Une avec un count et une avec un LIMIT ce que je veux éviter !
Il faudrait que je puisse integrer simplement SQL_CALC_FOUND_ROWS à coté de l'instruction SELECT
Hors ligne
avec SQL_CALC_FOUND_ROWS tu fais aussi deux requête une pour le SQL_CALC_FOUND_ROWS et une avec le limit
A+JYT
Hors ligne
pour faire du page par page regarde aussi la méthode de pagination de Zend
Hors ligne
sekaijin a écrit:
avec SQL_CALC_FOUND_ROWS tu fais aussi deux requête une pour le SQL_CALC_FOUND_ROWS et une avec le limit
A+JYT
Non je ne suis pas d'accord avec toi. Tu peux lire ici qu'il n'ya qu'une seule requete (complexe) de faite :
http://dev.mysql.com/doc/refman/5.0/fr/ … tions.html
matdev a écrit:
pour faire du page par page regarde aussi la méthode de pagination de Zend
Zend Paginator ne m'intéresse pas car il sert juste ergonomiquement à ne pas afficher tous les résultats. Mais il n'a aucune possibilité d'améliorer les performances.
Exemple si on a 100000 entrées dans ma table... la requête retournera d'abord tous les enregistrements (ce que je veux éviter) et Zend_Paginator se changera de simplement les afficher page/page
Hors ligne
bon ok côté moteur ce n'est pas la même chose mais tu fais tout de même deux query et je ne vois pas ce qui t'empêche de faire deux query avec Zend
A+JYT
Hors ligne
sekaijin a écrit:
bon ok côté moteur ce n'est pas la même chose mais tu fais tout de même deux query et je ne vois pas ce qui t'empêche de faire deux query avec Zend
A+JYT
Je fais peut être 2 requetes, mais la deuxieme requete est minime : SELECT FOUND_ROWS( );
Elle ne représente quasiment rien par rapport à une requete de type SELECT COUNT(id) FROM matable....
J'ai simplement besoin d'integrer SQL_CALC_FOUND_ROWS apres mon SELECT quoi !
Hors ligne
je crois qu'il faut faire un truc du genre:
$select->from(new Zend_Db_Expr('FOUND_ROWS(...)'));
si j'ai bien compris le problème.
Hors ligne
Ca ca serait pour la deuxieme reuqte effectivement ...
Mais il y'a toujours un problème pour la création de la première requete
Hors ligne
Quelque chose comme ça?
$select->from('matable', array(new Zend_Db_Expr('SQL_CALC_FOUND_ROWS', 'id')));
Hors ligne
query te permet de faire une requête avec SQL je ne vois pas ce qui te pose problème
tu donne toi même la les requête à exécuter
pourquoi tu ne les exécute pas ?
A+JYT
Hors ligne
Il veut l'exécuter avec Zend_Db_Select.
Hors ligne
et alors qu'on écrive sa requête en string ou avec zend_Db_Select ça ne change rien
A+JYT
Hors ligne
Pages: 1