|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
Bonjour à tous,
comme indiqué dans l'intitulé, j'ai un problème avec Zend_Paginator, lorsque je l'utilise avec une requête qui fait un "select distinct". Code :
En effet, lorsque je teste la requête générée pour l'affichage des résultats dans ma base de données, celle ci prend bien en compte le mot clé "DISTINCT", et j'obtiens un nombre de résultats différents de celui affiché dans ma barre de pagination. Si je teste la requête sans le mot clé "DISTINCT", j'obtiens le même nombre de résultats. Quelqu'un d'entre vous aurait-il déjà rencontré ce problème? Si oui comment y remédier? Merci d'avance pour vos réponses... |
||
|
|
00
|
|
|
#2 | ||
![]() ![]() Loïc Développeur Web Inscription : février 2011 Messages : 680 ![]() |
Je pense que dans ton cas le distinct est fait sur l'ensemble d'un row et je doute que ceux ci soit identique.
Je t'invite à faire : Code :
Pour moi cela vient du *, tu devrais essayer de spécifie la clé primaire de ta table pour voir |
||
|
|
00
|
|
|
#3 | ||
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
Merci pour ta réponse.
J'avais déja fait: Code :
C'est à partir de cette requête que j'ai effectué mes tests puis que j'ai remarqué que le nombre de pages affiché était calculé sans prendre en compte le "DISTINCT". D'autre part, j'ai besoin de toutes les colonnes pour l'affichage des résultats, c'est pour cela que j'utilise le * dans ma requête. |
||
|
|
00
|
|
|
#4 |
![]() ![]() Loïc Développeur Web Inscription : février 2011 Messages : 680 ![]() |
Tu peux nous faire voir le résultat du __toString()?
merci |
|
|
00
|
|
|
#5 | ||
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
Ci-dessous la requête renvoyée:
Code :
|
||
|
|
00
|
|
|
#6 |
![]() ![]() Loïc Développeur Web Inscription : février 2011 Messages : 680 ![]() |
donc cette requête sur ton sgbd retourne le bon résultat ? Tu en es sur ?
Car tu devrais essayer de faire que ton distinct soit sur ta clé primaire, car la je doute que tu es deux row avec exactement les mêmes informations, du coup ton distinct ne doit servir à rien, entre ça sous phpMyAdmin par exemple et confirme moi que cela te retourne tous les résultat |
|
|
00
|
|
|
#7 |
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
Oui j'en suis sur!
Quand je lance cette requête sur ma base, j'obtiens le bon nombre de résultats qui est différent de celui qui est affiché dans ma pagination. Quand je reprends cette même requête et que je la lance en omettant le "DISTINCT" j'obtiens le même nombre qui est affiché dans la pagination??? Comme je l'ai dit auparavant, j'ai besoin de sélectionner tous les champs de ma table pour l'affichage des résultats, c'est pour ça que je n'effectue pas le distinct sur la clé primaire de ma table... |
|
|
00
|
|
|
#8 |
![]() ![]() Loïc Développeur Web Inscription : février 2011 Messages : 680 ![]() |
Le distinct comme tu l'écrit te retourne obligatoirement toutes les ligens de ta table.
Ton distinct tu le mets par rapport à quel élément de ta table ? qu'est ce qui est susceptible d'apparaître plusieurs fois ? (tu ne peu pas avoir deux clé primaire avec la même valeur donc la je ne vois pas à quoi sert ton distinct, un peu plus de détails serait bien je pense. C'est pas parce que tu as besoin de tous les champs de ta table que tu ne peux pas utiliser distinct sur un champs particulier |
|
|
00
|
|
|
#9 |
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
Etant donné que je fais des jointures avec d'autres tables, je peux avoir deux mêmes clés primaires dans mes résultats. Le distinct doit donc se faire sur la clé primaire.
|
|
|
00
|
|
|
#10 |
![]() ![]() Loïc Développeur Web Inscription : février 2011 Messages : 680 ![]() |
Je vois ce que tu veux dire, donc il faut bien que tu essaye de faire le distrinct sur le champs correspondant à ta clé primaire.
Il est possible de faire : Code :
select distinct(id), champs2, champs3 ... |
|
|
00
|
|
|
#11 |
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
Le nom des tables sont des paramètres et donc le nom des clés primaires varient d'une table à l'autre.
D'autre part, certaines tables possèdent un trop grand nombre de champ.... |
|
|
00
|
|
|
#12 |
![]() ![]() Loïc Développeur Web Inscription : février 2011 Messages : 680 ![]() |
Ben essaye au moins pour voir si ça vient de là déjà, sinon ça va être dur d'avancer, fait le premier teste que je t'ai dis en faisant juste un select sur la clé primaire
|
|
|
00
|
|
|
#13 |
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
En effet, ça vient de là, en précisant la clé primaire, le nombre de pages qui s'affiche est cohérent avec les résultats. Reste à moi de voir comment récupérer le nom de la (ou des) clé(s) primaire(s) de la table paramétrée....
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com