Ticket #1 (closed new feature: fixed)

Opened 2 years ago

Last modified 9 months ago

attribut distinct

Reported by: zagor Assigned to: laurentj
Priority: normal Milestone: Jelix 1.0 RC1
Component: jelix:dao Version: 1.0alpha4
Severity: normal Keywords:
Cc: Php version:
Review: Hosting Provider:
Documentation needed: Blocking:
Blocked By: 7, 161, 540

Description

<factory>
<method name="findNomByCiv" type="select" distinct="nom">
<parameter name="civ" />
<conditions>
<eq property="civilisation" expr="$civ" />
</conditions>
<order>
<orderitem property="nom" way="asc" />
</order>
</method>
</factory>

Avec ceci le distinct se fait sur l'ensemble des champs de la base et non pas uniquement sur nom.

Change History

09/13/06 13:30:00 changed by laurentj

  • priority changed from normal to low.

en fait, il y a une mauvaise interpretation de ma part sur le mot clé distinct. La distinction se fait sur l'ensemble des champs déclarés dans l'expression SELECT et non pas sur un champs unique parmis ceux indiqués. Or il n'est pas prévu par jDao de limiter un select que sur un ou quelques champs indiqués parmis les propriétés... Si on permettait cela, cela voudrait dire que la méthode ne peut envoyer des objets records (dont toutes les propriétés devraient être renseignées). On casserait donc le modèle actuel de jDao.

Il faut reflechir alors à un nouveau modèle ou à un nouveau type de méthode... Ce "bug" sera corrigé donc plus tard. En attendant, je change l'attribut distinct : il ne doit contenir que true ou false. L'alternative pour ton cas serait donc de faire une méthode en php..

01/19/07 22:05:59 changed by laurentj

  • isp changed.
  • phpversion changed.
  • milestone set to Jelix 1.0.

09/05/07 12:45:34 changed by laurentj

  • priority changed from low to high.
  • blocking changed.

09/27/07 17:35:46 changed by laurentj

  • priority changed from high to normal.
  • severity changed from minor to normal.

En fait, selon les specs de SQL et aprés vérification dans mysql, il n'est pas possible de faire un select DISTINCT(champs, champs). En tout cas, ça ne change pas le comportement par rapport à un select DISTINCT champs, champs.

Si on veut juste récupérer les enregistrements qui ne font pas doublon, sur un ou plusieurs champs parmis la totalité des champs SELECT, il faut en fait utiliser un GROUP BY.

On pourrait alors avoir un attribut group by, qui devrait contenir une liste de propriété sur lesquelles faire le group by.

09/27/07 17:39:05 changed by laurentj

  • type changed from bug to new feature.

12/04/07 22:52:31 changed by laurentj

  • owner set to laurentj.
  • status changed from new to assigned.

Ajouté dans le trunk, le support d'un attribut groupby sur les méthodes de type select. On y met la liste des propriétés sur lesquelles faire le groupby.

(follow-up: ↓ 8 ) 12/04/07 22:52:49 changed by laurentj

  • status changed from assigned to closed.
  • resolution set to fixed.

(in reply to: ↑ 7 ) 12/17/07 16:14:18 changed by chris

  • status changed from closed to reopened.
  • resolution deleted.

Replying to laurentj: Oui, mais le GROUPBY doit être fait *avant* le ORDER BY, sinon mysql gueule !

12/17/07 16:24:26 changed by laurentj

  • status changed from reopened to closed.
  • resolution set to fixed.

Merci de créer un nouveau ticket pour les nouveaux bugs. Ne plus rouvrir ce ticket s'il vous plait.

Download in other formats: Comma-delimited Text Tab-delimited Text RSS Feed