Ticket #1 (closed new feature: fixed)

Opened 4 years ago

Last modified 3 years ago

attribut distinct

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

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

  Changed 4 years ago 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..

  Changed 4 years ago by laurentj

  • milestone set to Jelix 1.0

  Changed 3 years ago by laurentj

  • priority changed from low to high

  Changed 3 years ago 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.

  Changed 3 years ago by laurentj

  • type changed from bug to new feature

  Changed 3 years ago 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   Changed 3 years ago by laurentj

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

in reply to: ↑ 7   Changed 3 years ago by chris

  • status changed from closed to reopened
  • resolution fixed deleted

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

  Changed 3 years ago 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.

Note: See TracTickets for help on using tickets.