Le jeudi 26 novembre 2009 10:27, Bruno Vernay a écrit :
> Le plus simple est à priori de faire la requete genre :
>
> Select numEvenement, numVotant, numObjet, classement
> FROM ..
> GROUP BY numEvenement, numVotant, numObjet, classement
> HAVING date = MAX(Date)
>
> ou
>
> WITH lastDate AS (
> SELECT numEvenement, numVotant, numObjet, MAX(date) As theDate
> FROM ..
> GROUP BY numEvenement, numVotant, numObjet
> )
> Select numEvenement, numVotant, classement, numObjet
> FROM .. INNER JOIN lastDate ON liens sur tous les champs de lastDate
> notamment ?.date = lastDate.theDate
> ORDER BY numEvenement, numVotant, classement
Ah, c'est donc GROUP BY la clé... Je vais regarder la doc de plus près.
> Ensuite soit regrouper les object dans le code (PHP ?) Soit utiliser une
> fonction d'agrégation de mySQL qui fasse la concaténation (je n'ai pas en
> tete)
Je voudrais éviter de coder en dehors (surtout pour la beauté du truc, et
histoire d'en apprendre un peu plus sur SQL).
> Pour ce qui est du design, ca serait éventuellement plus simple de ne pas
> garder tout l'historique des votes dans une seule table.
> Soit mettre un flag pour le dernier vote (le seul intéressant), soit
> envoyer les vieux votes vers une table d'archive. Surtout voir
> l'intérêt de garder l'historique des votes.
Il n'y a pas vraiment d'intérêt, si ce n'est de limiter les opérations lors
de l'insertion ; je voulais que ça reste le plus simple possible, pour plus
de fiabilité, quitte à complexifier lors du dépouillement.
En tout cas, merci pour les pistes.
--
Frédéric
http://www.gbiloba.org