El problema viene cuando intento mostrar la lista ordenada por votos, mientras que si está ordenada por nombre o fecha no hay problema.
Aquí dejo una captura de la BD:
rate_id, rate_table y rate_itemid definen el item que se votó (rate_id es el ID en esta tabla, rate_table es la tabla a la que pertenece el item y rate_itemid el ID que tiene en la tabla a la que pertenece).
rate_rating es el total de la suma de los votos (se vota del 1 al 10)
rate_votes es el total de votos (en este caso 2 personas han votado este item)
rate_voters son los ID de los usuarios que han votado (para que sólo puedan votar 1 vez)
No sé porque da problemas cuando lo único que tiene que hacer es dividir el campo "rate_rating" entre "rate_votes" y ordenarlo descendente.
Alguna idea?
EDITO: El CMS es e107. Si no me equivoco, este es el código que maneja los votos:
Código:
function getrating($table, $id, $userid=FALSE) { //userid : boolean, get rating for a single user, or get general total rating of the item $table = preg_replace('/\W/', '', $table); $id = intval($id); $sql = new db; if (!$sql->db_Select("rate", "*", "rate_table = '{$table}' AND rate_itemid = '{$id}' ")) { return FALSE; } else { $rowgr = $sql->db_Fetch(); if($userid==TRUE){ $rating = ""; $rateusers = explode(".", $rowgr['rate_voters']); for($i=0;$i<count($rateusers);$i++){ if(strpos($rateusers[$i], chr(1))){ $rateuserinfo[$i] = explode(chr(1), $rateusers[$i]); if($userid == $rateuserinfo[$i][0]){ $rating[0] = 0; //number of votes, not relevant in users rating $rating[1] = $rateuserinfo[$i][1]; //the rating by this user $rating[2] = 0; //no remainder is present, because we have a single users rating break; } }else{ $rating[0] = 0; //number of votes, not relevant in users rating $rating[1] = 0; //the rating by this user $rating[2] = 0; //no remainder is present, because we have a single users rating } } }else{ $rating[0] = $rowgr['rate_votes']; // $rating[0] == number of votes $tmp = $rowgr['rate_rating'] / $rowgr['rate_votes']; $tmp = (strpos($tmp,",")) ? explode(",", $tmp) : explode(".", $tmp); $rating[1] = $tmp[0]; if(isset($tmp[1])){ $rating[2] = substr($tmp[1], 0, 1); }else{ $rating[2] = "0"; } } return $rating; } }