390,7 → 390,7 |
if (isset($this->parametres['tri'])) { |
$tri = $this->parametres['tri']; |
|
if (isset($this->parametres['protocole']) && ($tri == 'votes' || $tri == 'points')) { |
if (isset($this->parametres['protocole']) && ($tri == 'moyenne-arithmetique' || $tri == 'points')) { |
// $this->parametres['protocole'] *est* défini (cf Outils::filtrerUrlsParams...()) |
$sqlTpl = 'LEFT JOIN del_image_stat dis ON vdi.id_image = dis.ce_image AND dis.ce_protocole = %d'; |
$triSql = sprintf($sqlTpl, $this->parametres['protocole']); |
485,29 → 485,26 |
|
/** |
* Partie spécifique à PictoFlora: |
* génération de la clause ORDER BY (génère la valeur de la clef orderby' de $req) |
* nécessaire ? tableau sprintf(key (tri) => value (ordre), key => value ...). |
* Cependant il est impensable de joindre sur un AVG() des valeurs des votes pour |
* *chaque* couple (id_image, protocole) de la base afin de trouver les images |
* les "mieux notées", ou bien les images ayant le "plus de tags" (COUNT()) |
* Attention : si le critère de tri n'est pas suffisant, les résultats affichés peuvent varier à chaque appel |
* de la même page de résultat de PictoFlora. |
*/ |
public function definirOrdreSqlAppliImg() { |
$ordre = $this->parametres['ordre']; |
|
// parmi self::$tri_possible |
switch ($this->parametres['tri']) { |
case 'votes' : |
$this->addOrderBy("dis.moyenne $ordre, dis.nb_votes $ordre"); |
case 'moyenne-arithmetique' : |
$this->addOrderBy("dis.moyenne $ordre, dis.nb_votes $ordre, id_image DESC"); |
break; |
case 'points' : |
$this->addOrderBy("dis.nb_points $ordre, dis.moyenne $ordre, dis.nb_votes $ordre"); |
$this->addOrderBy("dis.nb_points $ordre, dis.moyenne $ordre, dis.nb_votes $ordre, id_image DESC"); |
break; |
case 'tags' : |
$this->addOrderBy("dis.nb_tags $ordre"); |
$this->addOrderBy("dis.nb_tags $ordre, id_image DESC"); |
break; |
case 'date_observation' : |
$this->addOrderBy("date_observation $ordre, id_observation $ordre"); |
break; |
case 'date_transmission' : |
default: |
$this->addOrderBy("date_transmission $ordre, id_observation $ordre"); |
} |
583,7 → 580,7 |
$protoId = $vote['protocole.id']; |
|
if (!array_key_exists('protocoles_votes', $images[$imgId]) || |
!array_key_exists($protoId, $images[$imgId]['protocoles_votes'])) { |
!array_key_exists($protoId, $images[$imgId]['protocoles_votes'])) { |
// extrait les champs spécifique au protocole (le LEFT JOIN de chargerVotesImage les ramène en doublons |
$protocole = array_intersect_key($vote, array_flip($mappingProtocoles)); |
$images[$imgId]['protocoles_votes'][$protoId] = $protocole; |