|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre éprouvé
![]() Inscription : décembre 2005 Messages : 818 ![]() |
Hello,
Pour un système de pagination, je calcul mes pages en fonction du nombre max de records dans la bd. Seulement, je me demande si il n'est pas possible de ne faire qu'une seule requête au lieu de 2? J'en ai une avec le LIMIT x, y Et l'autre identique sans le LIMIT qui me retourne le nombre max d'élément. N'est-il pas possible d'obtenir le nombre max avec la première requête Exemple de requête: SELECT g.id, g.parentGallery, g.image, g.thumb, gc.title, gc.description FROM com_gallery AS g INNER JOIN com_gallery_content AS gc ON g.id= gc.galleryId WHERE gc.languageId=1 AND g.type="gallery" AND g.status=1 AND ((g.access<=20 AND g.accessType=0) LIMIT 0, 2 SELECT g.id, g.parentGallery, g.image, g.thumb, gc.title, gc.description FROM com_gallery AS g INNER JOIN com_gallery_content AS gc ON g.id= gc.galleryId WHERE gc.languageId=1 AND g.type="gallery" AND g.status=1 AND ((g.access<=20 AND g.accessType=0) Merci beaucoup. |
|
00
|
|
|
#2 |
![]() Développeur Web Inscription : juillet 2003 Messages : 676 ![]() |
que je sache, ce n'est pas possible.
Par contre ton code est optimisable 1) ceci est la partie commune Code :
$common_sql = "FROM com_gallery AS g INNER JOIN com_gallery_content AS gc ON g.id= gc.galleryId WHERE gc.languageId=1 AND g.type='gallery' AND g.status=1 AND ((g.access<=20 AND g.accessType=0)"; 2) Calcul du total Au lieux de tout braser, utilise le SQL !!! Code :
$total_sql = "SELECT COUNT(*) as nb ".$common_sql; 3) enfin la dernière, telle que tu l'as faite Code :
$page_sql = "SELECT g.id, g.parentGallery, g.image, g.thumb, gc.title, gc.description ".$common_sql." LIMIT 0, 2";
__________________
Articles sur developpez.com - Gestion des exceptions avec PHP5 - Chiffrement et hash en PHP contre l'attaque Man in the middle - Aedituus - Espace membre sécurisé en PHP5 Lithium : ORM ActiveRecord PHP5 extrêmement léger |
|
00
|
|
|
#3 |
|
Membre éprouvé
![]() Inscription : décembre 2005 Messages : 818 ![]() |
OK merci pour cette correction
Seulement petite question: Pourquoi inverser les quotes??? Justement j'ai construit mes requêtes avec des ' ' au lieu de " " pour que PHP n'interprète pas le contenu de la requête et donc ainsi gagner du temps d'execution. |
|
00
|
|
|
#4 | |
![]() Développeur Web Inscription : juillet 2003 Messages : 676 ![]() |
Citation:
les attributs HTML sont logiquement entourés de ", il est donc plus simple de faire Par contre, les string dans les requètes MySQL doivent être entourés de ' , il est donc plus simple d'écrire Code :
$sql = "SELECT toto FROM titi WHERE tata='tutu'";
__________________
Articles sur developpez.com - Gestion des exceptions avec PHP5 - Chiffrement et hash en PHP contre l'attaque Man in the middle - Aedituus - Espace membre sécurisé en PHP5 Lithium : ORM ActiveRecord PHP5 extrêmement léger |
|
|
00
|
|
|
#5 |
|
Membre éprouvé
![]() Inscription : décembre 2005 Messages : 818 ![]() |
Un grand merci pour ces précisions
|
|
00
|
|
|
#6 | ||
|
Membre éprouvé
![]() Inscription : décembre 2005 Messages : 818 ![]() |
Les requêtes et le COUNT(*) marchent très bien excepté pour une requête un peu plus complexe où le COUNT(*) me retourne 3 au lieu de 1.
Voici ma requête: Code :
Pourtant la requête commune est identique ? (logique) Un grand merci pour vos lumières... |
||
|
00
|
|
|
#7 | |
|
Membre confirmé
![]() ![]() |
Citation:
Il faut éviter les SELECT COUNT(*) et mettre à la place SELECT COUNT(id) c'est un gain en performance qui est important sur les grosse BDD
__________________
Gnarf ! www.uni-d.net (Wamp MSS) - Mon C.V. - Mon Blog .NET {VS 2010 && LINQ} && PHP {(Zend Studio || Notepad++) && (WAMP || WAMP mss)} && Multimédia {Flash CS5 && Photoshop CS5} Pensez au TAG
|
|
|
|
00
|
|
|
#8 |
![]() Développeur Web Inscription : juillet 2003 Messages : 676 ![]() |
oui c'est vrai
![]() enfin dans ton cas je dirais COUNT(p.id)
__________________
Articles sur developpez.com - Gestion des exceptions avec PHP5 - Chiffrement et hash en PHP contre l'attaque Man in the middle - Aedituus - Espace membre sécurisé en PHP5 Lithium : ORM ActiveRecord PHP5 extrêmement léger |
|
00
|
|
|
#9 |
|
Membre Expert
![]() Inscription : février 2005 Messages : 1 797 ![]() |
Code :
Il faut éviter les SELECT COUNT(*) et mettre à la place SELECT COUNT(id) c'est un gain en performance qui est important sur les grosse BDD D'autre part tu peux utiliser SQL_CALC_FOUND_ROWS et FOUND_ROWS() si t'es en >=4.0, pour effectuer une seule requête. Bye [edit]Ah nan en fait c'est juste optimisé pour les requêtes sans where le count(*) [/edit] |
|
|
00
|
|
|
#10 |
![]() Développeur Web Inscription : juillet 2003 Messages : 676 ![]() |
on en apprend tous les jours.
Merci pour ces infos Djakisback, en effet, c'est super pratique
__________________
Articles sur developpez.com - Gestion des exceptions avec PHP5 - Chiffrement et hash en PHP contre l'attaque Man in the middle - Aedituus - Espace membre sécurisé en PHP5 Lithium : ORM ActiveRecord PHP5 extrêmement léger |
|
00
|
|
|
#11 |
|
Membre éprouvé
![]() Inscription : décembre 2005 Messages : 818 ![]() |
Donc il vaut mieux utiliser un COUNT(id) et non un COUNT(*) ?
|
|
00
|
|
|
#12 | |
![]() Développeur Web Inscription : juillet 2003 Messages : 676 ![]() |
en fait, comme l'a dit Djakisback, regarde plutôt dans la doc MySQL les fonctions :
Citation:
__________________
Articles sur developpez.com - Gestion des exceptions avec PHP5 - Chiffrement et hash en PHP contre l'attaque Man in the middle - Aedituus - Espace membre sécurisé en PHP5 Lithium : ORM ActiveRecord PHP5 extrêmement léger |
|
|
00
|
|
|
#13 |
|
Membre éprouvé
![]() Inscription : décembre 2005 Messages : 818 ![]() |
Ok merci
|
|
00
|
Copyright © 2000-2012 - www.developpez.com